Как очистить весь просмотр таблицы одним нажатием кнопки в iPhone SDK? - PullRequest
0 голосов
/ 18 января 2011

В моем приложении для iPhone я использую одно табличное представление для отображения различных наборов данных на основе нажатой кнопки.

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

А это вполне нормальное требование обряда?Таким образом, неэффективно брать 7 таблиц для отображения 7 различных наборов данных.

Проблема:

Я видел, что таблица очищается, но когда мы отображаем некоторые другие данныезатем в таблице предыдущие данные отображаются в фоновом режиме, как показано на снимке экрана ПОСЛЕ.Я попытался установить массив как ноль и перезагрузить tableView, но затем он не работает.

Что может быть исправлено для этой проблемы?

Я проверил код, и он кажется правильныммне.

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

ДО (то есть при первом нажатии на событие)

alt text

ПОСЛЕ (т. Е. После нажатия кнопки категории события после какой-либо другой кнопки категории)

Вы можете четко видеть другое изображение на заднем плане, где каконо должно быть таким же, как изображение на скриншоте выше.Это не кнопка, я добавляю UIImageView к tableViewCell.

alt text

Ответы [ 5 ]

2 голосов
/ 18 января 2011
- (IBAction)yourAction {
tableView.delegate = nil;
tableView.dataSource = nil;
[tableView reloadData];

}

он опустошит ваш вид таблицы ... ваша потребность не ясна

2 голосов
/ 18 января 2011

NSArray не является изменяемым, то есть его нельзя изменить.

Вместо использования NSArray используйте NSMutableArray и используйте

[mutArr removeAllObjects];

и затем перезагрузите tableView. У меня это сработало.

0 голосов
/ 18 января 2011

Вы можете вернуть ноль для numberOfRowsInSection и добавить переменную BOOL для isEmpty.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if(isEmpty){
       return 0;
    }else{
       // your current logic
    }
}

//action when button clicked
-(IBAction)myAction{
    isEmpty = TRUE;
    [self reloadData];
}
0 голосов
/ 18 января 2011

Не думаю, что это сработает, если ваш массив равен нулю.Попробуйте инициализировать его как пустой массив с помощью:

myArr = [NSArray array]; 

, а затем перезагрузите данные tableView.В противном случае я думаю, что нам нужно увидеть ваш код

РЕДАКТИРОВАТЬ

Это все еще немного неясно (все еще нет кода в вашем вопросе), но я думаю, ваша проблемасвязанные с вашей конструкции клетки.Добавляете ли вы UIImageView в каждое сообщение cellForRowAtIndexPath?

Полагаю, у вас есть что-то похожее на:

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

      static NSString *CellIdentifier = @"cellName";

      myCell *cell = (myCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
      if (cell == nil) {
          //CONSTRUCT CELL. 
          //THIS IS THE ONLY PLACE WHERE YOU SHOULD ADD SUBVIEWS TO YOUR CELL
      }

    //Are you adding subviews here? -you shouldn't
    //configure data in cell
    return cell;
0 голосов
/ 18 января 2011

В методе действия кнопки вызовите перезагрузку tableView и присвойте null объекту, из которого вы ранее инициализировали ячейки,

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