2012-10-24 2 views
1

Как установить первую строку таблицы просмотра, отмеченную при запуске приложения? Я имею в виду, когда я запускаю приложение сейчас, в таблице есть несколько строк, и когда я нажимаю на некоторые из них, его аксессуар меняет флажок. Когда вы нажимаете другой, другой появляется на флажке, а предыдущая галочка исчезает. Итак, теперь я хочу, чтобы первая строка tableview была отмечена галочкой при запуске приложения, а затем, когда я нажимаю другую строку, это «снять отметку» и «галочку» с новой строкой и т. Д.Default CellAccessory

ответ

1

Попробуйте варианты, предложенные в этих постах how to apply check mark on table view in iphone using objective c? или iPhone :UITableView CellAccessory Checkmark

В основном вам нужно следить за флажки с помощью скажу словарь или около того. И в методе viewDidLoad или init сделайте первую ячейку, указанную в словаре. При рисовании ячеек всегда проверяйте, отмечена ли соответствующая запись в словаре или нет, и соответствующим образом отобразите галочку. Когда пользователь нажимает на ячейку, измените значение в словаре на отметку/непроверенную.

Обновление: Вот пример кода.

В файле .h объявить свойство, как

@property(nonatomic) NSInteger selectedRow; 

Затем используйте код ниже,

- (void)viewDidLoad { 
    //some code... 

    self.selectedRow = 0; //if nothing should be selected for the first time, then make it as -1 
    //create table and other things 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // create cell and other things here 

    if (indexPath.row == self.selectedRow) 
    { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } else { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    return cell; 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    // some other code.. 

    if (indexPath.row != self.selectedRow) { 
     self.selectedRow = indexPath.row; 
    } 

    [tableView reloadData]; 
} 
+0

Как именно сохранить этот трек с галочками? – TomasJ

+0

Существует несколько способов, которыми это можно сделать. Один из примеров здесь. Http://joshgrenon.com/2009/07/20/iphone-development-how-to-create-checkmarks-in-a-uitableview/ ... Я обновил ответ другим способом, чтобы сделать это – iDev

+0

вы можете использовать 'reloadData' в' tableView' в 'ViewDidLoad', если вы создаете его с IB –

1

Вы можете установить целое число в переменную, аналогичную «checkedCell», присваивает этому значению значение по умолчанию ячейке 0, а в поле cellForRowAtIndexPath проверяет, проверена ли ячейка, если она не изменяет аксессуар, чтобы проверить его и обновить переменную.

-(void)viewWillAppear{ 
    currentCheckedCell = 0; 
} 

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // 
    // Create cells -- if indexpath.row is equal to current checked cell reload the table with the correct acessories. 
    // 
    static NSString *cellIdentifier = @"RootMenuItemCell"; 
    MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

    if (cell == nil) { 

     cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier]; 
     NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil]; 
     for (UIView *view in nibContents) { 
      if ([view isMemberOfClass:[MyCell class]]) { 
       cell = (MyCell *)view; 
       break; 
      } 
     } 

     //OTHER CELL CREATION STUFF HERE 

     // cell accessory 
     UIImage *accessory = [UIImage imageNamed:@"menu-cell-accessory-default.png"]; 
     UIImage *highlighted = [UIImage imageNamed:@"menu-cell-accessory-selected.png"]; 
     if(indexPath.row == currentCheckedCell){ 
      //DEFAULT ACCESSORY CHECK 
      // cell.accessoryType = UITableViewCellAccessoryCheckmark; 

      UIImageView *accessoryView = [[UIImageView alloc] initWithImage:accessory highlightedImage:highlighted]; 
     }else{ 
      //DEFAULT ACCESSORY NONE 
      // cell.accessoryType = UITableViewCellAccessoryNone; 
       UIImageView *accessoryView = [[UIImageView alloc] initWithImage:accessory highlightedImage:accessory]; 
     } 
     [cell setAccessoryView:accessoryView]; 

    } 
return cell; 
} 

- (void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
     //UPDATE SELECTED CELL & RELOAD TABLE 
     currentCheckedCell = indexPath.row; 
     [self.tableview reloadData]; 
} 

Также стоит отметить, что в моих примерах используются пользовательские изображения для аксессуаров. Если вы посмотрите ссылку @ACB, вы найдете очень похожую концепцию.

+0

Я действительно не понимаю вашу идею. Не могли бы вы поставить там какой-то код, что вы имеете в виду, пожалуйста? – TomasJ

+0

Я просто не могу использовать этот метод со своим табличным просмотром, это не помогло – TomasJ

1

Вы можете использовать,

if (firstCellSelected) 
    { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 

Установите firstCellSelected флаг в viewDidLoad методе ,

Смежные вопросы