UIToolBar с UITableView - TableView не обновляется при загрузке - PullRequest
2 голосов
/ 02 июня 2009

UIToolBar имеет два вида: UIView с UITextViews и UIView с UITableView.

UITableView, который вызывается через UIToolBar. При первой загрузке UITableView он попадает в БД и получает информацию. Я «вкладываю» обратно в UIView с UITextViews, выбираю некоторые данные, а затем «вкладываю» обратно в UITableView, но ни один из методов делегата не вызывается, как viewDidLoad, initWithNibName или что-либо еще, поэтому данные в таблице устарели.

Итак, я выяснил способ

-(void)viewWillAppear:(BOOL)animated { 

вызывается, ОДНАКО, у него нет доступа к tableView, как, скажем,

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

Я наткнулся на эту рекомендацию:

"Я не могу понять, как сделать обновление UITableView ... Я нашел это, что похоже на то же самое у меня проблема,

Что я сделал, так это создал Свойство MyTableViewController * в MyModalViewController класс. До presentModalView, храню таблицу просмотреть указатель контроллера на это свойство в контроллере модального вида.

Теперь у меня есть ссылка на табличное представление контроллер, когда я в модальном представлении контроллер. Теперь просто используйте это хранится контроллер табличного представления, чтобы найти его tableView, затем перезагрузите данные.

Чувствует себя грязно, но выполняет работу. "

Если это ответ, я не уверен, как его кодировать.

Спасибо, вперед!

  • ск

Примечание: я только что попробовал это:

.h

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

@synthesize tableViewPtr; 

И сохранить его в -

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

Тогда попробуй позвонить с

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

Но, похоже, это не работает.

Ответы [ 4 ]

3 голосов
/ 27 августа 2009

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 в разделе Class Identity. Сохраните все, и все будет работать.

Обратите внимание, что если вы не добавите @property для вашего tableView, вы не будете называть себя, потому что нет доступа:

[yourTableView whatever:withWhatever];

Как и в случае с любым другим кодом, напечатанным на манжете, ваш пробег может отличаться. : \

2 голосов
/ 03 июня 2009

Спасибо за помощь. Наконец-то решена и вот была проблема:

1) Мой контроллер расширяет UIViewController, а не UITableViewController.

Как только я расширил правильный класс, а затем правильно связал его через Владельца Файла и IB, он заработал. Теперь в viewWillAppear я могу вызвать self.tableView reloadData.

Никогда больше не совершу эту ошибку!

Спасибо всем -

ск

1 голос
/ 17 августа 2009

Вы можете использовать UIViewController - вам просто нужно реализовать протоколы UITableViewDelegate и UITableViewDataSource.

- г

0 голосов
/ 02 июня 2009

в представлении появится метод (который, как я полагаю, находится в вашем классе контроллера), вызов

[self.tableView reloadData];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...