29

UIRefreshController が奇妙なことをしています。更新をプルダウンすると、tableView ヘッダーが移動します。

プルダウンすると問題ないように見えますが、リフレッシャーがまだ機能している間にテーブルを下にスクロールすると、ヘッダーは更新コントロールの高さによってオフセットされますが、UITableCells は問題なくヘッダーの後ろにスクロールします。

http://oi49.tinypic.com/2a8hqti.jpg

http://oi46.tinypic.com/acssrb.jpg

tableViewController の作成を避けたいので、viewDidLoad で次のことを行っています。

_refreshControl = [[UIRefreshControl alloc] init];
[_refreshControl addTarget:self action:@selector(refresh) forControlEvents:UIControlEventValueChanged];
[_tableView addSubview:_refreshControl];

この機能を必要とするさまざまなView Controllerに多くのテーブルがあります。それぞれに UITableViewController を作成しないようにする方法はありますか?

ありがとうございます!

4

5 に答える 5

18

_refreshControlこれは、実行されるべきではないサブビューとして追加しているため、問題になる可能性があります。ただし、UITableViewControllerオブジェクトを作成して、現在のビュー コントローラー クラスの子ビュー コントローラーとして追加することはできます。

例:-

UITableViewController *tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];
[self addChildViewController:tableViewController];

tableViewController.refreshControl = [[UIRefreshControl alloc] init];
[tableViewController.refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
tableViewController.tableView.frame = CGRectMake(...);//set the frame here
[self.view addSubview:tableViewController.tableView];
于 2013-03-05T21:40:22.763 に答える
17

これに対する簡単な修正は、このようにすることです

Objective-C

//header
@property UITableViewController *tableController;

//.m (right at the beginning of viewDidLoad for example)
self.tableController = [[UITableViewController alloc] init];
[self addChildViewController:self.tableController];
self.tableController.tableView = self.tableView;

...

//then create the refresh control and assign it to the UITableViewController
self.tableController.refreshControl = refreshControl;

スイフト 2.1

//Create an instance of a UITableViewController. This will host your UITableView.
private let tableController = UITableViewController()

//Add tableController as a childViewController and set its tableView property to your UITableView.
self.addChildViewController(self.tableController)
self.tableController.tableView = self.tableView
self.refreshControl.addTarget(self, action: "refreshData:", forControlEvents: .ValueChanged)
self.tableController.refreshControl = self.refreshControl

これは、テーブルが IBOutlet に接続されていて、ストーリーボードに他のものがリンクされている場合に役立ちます。

于 2014-09-25T08:24:12.507 に答える
0

この方法を試して、プッシュ ビュー コントローラーを追加してください。

テーブル ビュー コントローラーを作成し、既存のビュー コントローラーのサブビューとして追加します。次に、テーブル ビューとリフレッシュ コントローラーをテーブルビュー コントローラーのプロパティに割り当てます。

UITableViewController *newTableViewController = [[UITableViewController alloc] init];
newTableViewControler.tableView = <yourTableView>;

<yourRefreshController> = [[UIRefreshControl alloc] init];
[<yourRefreshController> addTarget:self
                            action:@selector(refreshTableView:)
                  forControlEvents:UIControlEventValueChanged];

newTableViewController.refreshControl = _chatListRefreshControl;
[self addChildViewController:newTableViewController];
于 2016-02-25T05:14:02.350 に答える