2

UIToolBar には、UIView w/UITextViews と UIView w/UITableView の 2 つのビューがあります。

UIToolBar を介して呼び出される UITableView。UITableView が初めて読み込まれるときに、DB にアクセスして情報を取得します。UITextViewsを使用してUIViewに「タブ」で戻り、UITableViewに「タブ」で戻りますが、viewDidLoadやinitWithNibNameなどのデリゲートメソッドは呼び出されないため、テーブル内のデータは古くなっています。

というわけで方法を発見

-(void)viewWillAppear:(BOOL)animated { 

が呼び出されますが、tableView へのアクセス権はありません。たとえば、

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

私はこの推奨事項に出くわしました:

「UITableView を更新する方法を理解できないようです...これを見つけましたが、これは私が抱えているのと同じ問題のようです。

私がしたことは、MyModalViewController クラスに MyTableViewController* プロパティを作成することです。presentModalView の前に、このプロパティへのテーブル ビュー コントローラー ポインターをモーダル ビュー コントローラーに格納します。

モーダルビューコントローラーにいるときに、テーブルビューコントローラーへの参照があります。次に、この格納されたテーブル ビュー コントローラーを使用して、その tableView を見つけてから、reloadData を見つけます。

汚れているように感じますが、仕事は完了します。」

それが答えなら、それをコーディングする方法がわかりません。

よろしくお願いします!

  • sk

注:私はこれを試しました:

.h

 UITableView *tableViewPtr; 
@property (nonatomic, retain) UITableView *tableViewPtr; 

.m

@synthesize tableViewPtr; 

そして、それを保管してください -

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {:
 ... 
 self.tableViewPtr = tableView; 
 ... 

次に、から呼び出してみます

-(void)viewWillAppear:(BOOL)animated {
 [self.tableViewPtr reloadData]; 

しかし、それはうまくいかないようです。

4

4 に答える 4

3

mr-sk: おそらく、Objective-C の仕組みについてもう少し学ぶ必要があります。UIViewController (またはサブクラス) を宣言するときは、UITableView プロトコルを実装するだけです。

@interface ViewWithTableView : UIViewController
    <UITableViewDelegate, UITableViewDataSource> {...}

次に、必要なプロトコル メソッドを viewController 内に実装します。tableView をサポートするために実装する必要があるメソッドはほんの一握りです。

IB を使用している場合は、次のようにインターフェイスを定義します。

@interface ViewWithTableView : UIViewController
    <UITableViewDelegate, UITableViewDataSource> {
    IBOutlet UITableView *yourTableView;
    . . .
}

保存してからIBに移動し、tableViewを右クリックします。DataSource と Delegate の両方のバインディングをクリックして、viewController (おそらくファイルの所有者) にドラッグします。次に、viewController をクリックして、cmd-4 と入力します。[クラス ID] セクションの [クラス] プルダウンで、「ViewWithTableView」またはそれを呼び出したものを選択します。すべてを保存すると、すべて機能します。

tableView に @property を追加しない限り、アクセサーがないため、self を呼び出さないことに注意してください。

[yourTableView whatever:withWhatever];

袖口から入力されたコードと同様に、マイレージは異なる場合があります. :\

于 2009-08-27T19:30:12.183 に答える
2

助けてくれてありがとう。最終的に解決され、ここに問題がありました:

1) 私のコントローラーは、UITableViewController ではなく、UIViewController を拡張していました。

正しいクラスを拡張し、ファイルの所有者と IB を介して正しく配線すると、機能しました。viewWillAppear で、self.tableView reloadData を呼び出すことができます。

二度とその過ちを犯すことはありません!

皆さんありがとう -

sk

于 2009-06-03T00:48:55.023 に答える
1

UIViewController を使用できます。UITableViewDelegate および UITableViewDataSource プロトコルを実装するだけで済みます。

--r

于 2009-08-17T16:52:58.683 に答える
0

ビューにメソッドが表示されます(これはコントローラークラスにあると想定しています)呼び出し

[self.tableView reloadData];
于 2009-06-02T01:50:13.090 に答える