0

私はNavigationiPhoneアプリを持っていますが、その「第2レベル」のコントローラーは、現在、ペン先にUIViewが含まれているUIViewControllerです。UIViewの上部にナビゲーションバー用のスペースを作成し、下部にツールバーを追加しました。その上に、更新ボタン、ラベル、およびアクティビティインジケーターを配置しました。最後に、大事なことを言い忘れましたが、私はテーブルビューを真ん中に置きました。

コントローラとペン先の間にすべてを接続し、ファイルの所有者をUIViewとデータソースに接続し、UIViewに含まれるUITableViewを委任して、ファイルの所有者を参照し、すべてが正常に機能するようにしました。

しかし、テーブルビューに更新するように指示する方法がわかりません。

テーブルを更新したいコードにこれを入れることができると思いました:

[self.tableView reloadData];

しかし、私の第2レベルのコントローラーがUITableViewControllerでない限り、そのコード行はコンパイルされません。2番目のレベルのコントローラーをUITableViewControllerにすると、ファイルの所有者がテーブルビューコントローラーを参照しないため、2番目のレベルのコントローラーが読み込まれると、アプリが爆発します。ファイルの所有者に、代わりにテーブルビューのアウトレットを参照させると、ビューでは、下部にあるツールバーとそのラベルおよび更新ボタンが表示されなくなったことを除いて、すべてが機能します。

単純に追加してみました

[self refresh];

[self.tableview reloadData]の代わりに、コードがループでスタックして、それ自体を更新します。

どうすればこれをすべて機能させることができますか?2番目のレベルのコントローラーをUIViewcontrollerのままにする必要があると思いますが、必要なときにそれ自体を更新するために、含まれているUITableViewを取得できるようにしたいのです。

4

1 に答える 1

1

第2レベルのコントローラーをUITableViewControllerにできないのはなぜですか?そもそもUIViewControllerのサブクラスなので、機能が失われることはありません。

いずれにせよ、UITableViewController以外のUIViewControllerクラスには、tableView呼び出すことができるプロパティがありません。代わりに、独自のivarのテーブルビューを保持して、それを呼び出す必要があります。(あなたはそれを呼ぶことさえできますtableView;あなたはそれをあなた自身で定義する必要があります。)

@interface MyViewController : UIViewController {
    UITableView *tableView;
}

@property(nonatomic,retain) IBOutlet UITableView *tableView;

- (void)myMethod;

@end
@implementation MyViewController

@synthesize tableView;

- (void)myMethod {
    [self.tableView reloadData];
}
于 2009-09-20T15:44:56.647 に答える