6

アプリケーションに を実装しようとしUIRefreshControlています。xib ファイルがありUITableViewController、空の nib ファイルに を追加し、refresh プロパティを「有効」に設定しました。viewDidLoadまた、カスタム更新メソッドにコードを追加しました。問題は、エラーが発生して情報が見つからないことです.... 「タイプのオブジェクトにviewDidLoadプロパティ ' ' が見つかりません」というメッセージが表示されますrefreshControlViewController

- (void)viewDidLoad{

[super viewDidLoad];

self.myTableView =
[[UITableView alloc] initWithFrame:self.view.bounds
                           style:UITableViewStyleGrouped];

self.myTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth |
                                  UIViewAutoresizingFlexibleHeight;

self.myTableView.delegate = self;
self.myTableView.dataSource = self;

[self.view addSubview:self.myTableView];

UIRefreshControl *refresh = [[UIRefreshControl alloc] init];

refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[refresh addTarget:self action:@selector(refreshView:) forControlEvents:UIControlEventValueChanged];

self.refreshControl = refresh;

}

-(void)refreshView:(UIRefreshControl *)refresh {

refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Refreshing data..."];

// custom refresh logic would be placed here...

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM d, h:mm a"];
NSString *lastUpdated = [NSString stringWithFormat:@"Last updated on %@",
                                [formatter stringFromDate:[NSDate date]]];

refresh.attributedTitle = [[NSAttributedString alloc] initWithString:lastUpdated];
[refresh endRefreshing];

}

そのプロパティが利用できない理由がわかりません....何が欠けていますか?

ファイルから継承する必要があるようUITableViewControllerです。ViewController.hすでにUITableViewそこにある場合、両方から継承するにはどうすればよいですか? コードを から に変更するViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>ViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>、エラーが発生します。

    error: NSInternalInconsistencyException', 
    reason: '-[UITableViewController loadView] loaded the "ViewController_iPhone" nib but didn't get a UITableView.'
4

5 に答える 5

11

UIRefreshControlにサブビューとして追加できますUITableView

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.myTableView addSubview:refreshControl];

Dave のコメントによると、これは iOS の将来のバージョンで壊れる可能性があります。したがって、これを使用している間は注意して、これに関するバグレポートをアップルに提出してください.

更新: より良いアプローチは、のUITableViewControllerとして追加してから、 のサブビューとして追加することです。この方法で機能させるためにハックを行う必要はありません。ChildViewControllerselftableViewController.tableViewself.view

[self addChildViewController:tableViewController];
[self.view addSubview:tableViewController.tableView];

それに応じてフレームを定義できますtableView。このアプローチを使用すると、UIRefreshControlで機能するのと同じように機能するはずですUITableViewController。`

于 2012-10-09T18:25:54.793 に答える
5

覚えておくべきこと:

  • UIRefreshControlのみUITableViewControllerなので、クラスは のサブクラスにする必要がありますUITableViewController

  • UITableViewControllerにプロパティrefreshControlがある場合、 を割り当てUIRefreshControl てそのプロパティに設定する必要があります。

元:

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

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];

[refreshControl addTarget:self action:@selector(refreshControlAction:) forControlEvents:UIControlEventValueChanged];

tableViewController.refreshControl = refreshControl;
于 2012-10-15T07:36:53.130 に答える
3

これらはすべて、単純なことを行うための複雑な方法です。

更新コントロールを追加したり、viewController で宣言したりする必要はありません。pull-to-refresh の追加は、2 段階のプロセスです。
ステップ 1: ストーリーボードで、tableViewController に移動し、"Refreshing" と表示されている場所で "Enabled" を選択します。
ステップ 2: 次のコードを tableViewController.m ファイルの viewDidLoad に追加します。

[self.refreshControl addTarget:self
                            action:@selector(refresh)
                  forControlEvents:UIControlEventValueChanged];

-refresh メソッドで何かを行う以外は、これがプロセス全体です。更新を停止するには、 を呼び出します[self.refreshControl endRefreshing];

于 2013-09-13T15:34:25.893 に答える
1

プロパティにアクセスするにはViewController、クラスが のサブクラスである必要があります。UITableViewControllerrefreshControl

于 2012-10-09T18:32:11.610 に答える
0

myTableView 用に別の UITableViewController サブクラスを作成することをお勧めします。そして、addChildviewController または iOS6 ContainerView を使用して、そのクラスを元の ViewController 内に追加します。そうすればViewの部分でもUIRefreshControlが使えます。

受け入れられた回答は公式の方法ではないため、コメントが言ったように、将来のリリースで壊れる可能性があります...

于 2012-11-13T21:28:33.673 に答える