2009-06-02 9 views
2

UIToolBarには、UIView with UITextViewsとUIView with UITableViewの2つのビューがあります。UITableViewを使用したUIToolBar - 読み込んだときにTableViewが更新されない

UIToolBarを介して呼び出されるUITableView。初めてUITableViewが読み込まれると、DBにヒットして情報を取得します。私は "UITextViews/UITextViewsを使用してUITableViewsへの"タブ "をいくつかのデータを選択し、UITableViewに戻ってきますが、viewDidLoadやinitWithNibNameなどのようにデリゲートメソッドが呼び出されないため、テーブルのデータは失効します。

だから、私は、しかし、それは、たとえばのように、のtableViewへのアクセス権を持っていない、

-(void)viewWillAppear:(BOOL)animated { 

が呼び出された方法を見つけ

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

私はこの勧告時につまずくんでした:

"I can't seem to figure out how to make the UITableView refresh ... I did find this, which seems like the same problem I'm having,

What I did is to create a MyTableViewController* property in MyModalViewController class. Before presentModalView, I store the table view controller pointer to this property in modal view controller.

Now I have a reference to table view controller when I'm in the modal view controller. Now just use this stored table view controller to locate its tableView, then reloadData.

Feels dirty but gets work done."

答えがあれば、コード化する方法がわかりません。

ありがとうございます!

  • 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]; 

からそれを呼び出すためにしかし、それは動作するようには思えないしてみてください。ビュー内の

+0

私もこれを試しました: .h UITableView * tableViewPtr; @property(非構造、保持)UITableView * tableViewPtr; .m @synthesize tableViewPtr; それを - (UITableViewCell *)に格納します。tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {: ... self.tableViewPtr = tableView; ... 次に、 - (void)viewWillAppearから呼び出すようにしてください。(BOOL)animated {: [self.tableViewPtr reloadData]; しかし、それは動作していないようです。 –

+0

善良な、最後のコメントは破棄されます。ごめんなさい。 –

答えて

0

は助けを

[self.tableView reloadData]; 
+0

FavoriteViewController.m:115:エラー:構造体または共用体ではないメンバー 'tableView'の要求 その名前のクラスプロパティはありません。私がtableViewを参照するとき、私はtableViewメソッドによって渡された引数を参照します。 –

+0

あなたのテーブルビューコントローラはtableViewにアクセスする必要があります - あなたは正しいファイルですか? – zpesk

+0

はい - 私はUIViewとUITableViewを含むViewControllerにいます。 私は理解していないことは、それがアクセスできるかどうかです。コントローラの他のメソッド( - (UITableViewCell *)tableView:(UITableView *)tableView)はtableViewに渡さなければなりません...だから私はなぜそれにアクセスするのか分かりません。 私が言ったように、私はこのクラスのtableViewプロパティを作っていませんでした。私の最初の投稿は私のプロジェクト構造(UITabControllerと2つのUIViewController)を概説しています。 –

2

感謝を呼び出して(私はあなたのコントローラクラスであると仮定している)方法を表示します。最後に解決され、ここに問題がありました:

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

私は正しいクラスを拡張してから、File's OwnerとIBを介して正しく配線したところ、正常に機能しました。 viewWillAppearで今私はself.tableView reloadDataを呼び出すことができます。

もう一度間違いはありませんか?

おかげですべて -

SK

1

あなたはのUIViewControllerを使用することができます - あなただけのUITableViewDelegateとUITableViewDataSourceプロトコルを実装する必要があります。

、-R

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と入力します。 "ViewWithTableView"を選択するか、Class IdentityセクションのClassプルダウンで呼び出されたものを選択します。すべてを保存してください。それはすべて動作します。

注意あなたがあなたのtableViewのための@propertyを追加しない限り、アクセサがないため、あなたは自分を呼び出すしないこと:

[yourTableView whatever:withWhatever]; 

任意のコードがカフをオフに入力した場合と同様に、あなたの走行距離は異なる場合があります。 :\