2013-12-06 3 views
0

Я работаю с табличным представлением. Я добавил флажок «Аксессуар» на первом касании экрана и удалил эту галочку во втором касании. Я добавил несколько ckeckmarks в ячейки таблицы. Теперь я хочу, чтобы метки в ячейках, имеющих галочки, отображались в NSlog. Пожалуйста, помогите мне в этом вопросе. Любая помощь будет очень удобной.Извлечение метки с меткой ячейки

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    if (tableView.tag == 0) 
    { 
     return [celltitles count]; 
    } 
    else 
    { 
    return 7; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"Cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    if (tableView.tag == 0) 
    { 
     cell.textLabel.text = [celltitles objectAtIndex:indexPath.row]; 

     if (indexPath.row == 0) 
     { 
      habitname = [[UITextField alloc]initWithFrame:CGRectMake(150, 0, 150, 50)]; 
      habitname.placeholder = @"Habit Name"; 
      habitname.delegate= self; 
      [cell addSubview:habitname]; 
     } 
       else if (indexPath.row == 1) 
     { 
      timelbl = [[UILabel alloc] initWithFrame:CGRectMake(100, 0, 220, 50)]; 
      timelbl.text = @"OFF"; 
      timelbl.textAlignment = NSTextAlignmentCenter; 
      [cell addSubview:timelbl]; 

      timetitlelbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 50)]; 
      timetitlelbl.text = @"Alert"; 
      timetitlelbl.textAlignment = NSTextAlignmentCenter; 
      [cell addSubview:timetitlelbl]; 

      toggleswitch = [[UISwitch alloc] initWithFrame:CGRectMake(250, 5, 50, 60)]; 
      toggleswitch.on = NO; 
      [toggleswitch addTarget:self action:@selector(toggleSwitch) forControlEvents:(UIControlEventValueChanged | UIControlEventTouchDragInside)]; 
      [cell addSubview:toggleswitch]; 

     } 
    } 
    else if (tableView.tag == 1) 
    { 
     cell.textLabel.text = [daysarray objectAtIndex:indexPath.row]; 

    } 

    return cell; 
} 

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == 1) 
    { 
     if (toggleswitch.on) 
     { 
      [self datepickershown:timelbl.text animated:YES]; 

      if (self.datePickerIsShowing) 
      { 
       //[self datepickershown]; 
       //[self hideDatePickerCell]; 
       [dscptxt resignFirstResponder]; 
      } 
      else 
      { 
       [dscptxt resignFirstResponder]; 
       [self.timelbl resignFirstResponder]; 
       [self showDatePickerCell]; 
      } 
     } 
     else 
     { 
      timelbl.textColor = [UIColor grayColor]; 
     } 

    } 
    else if (indexPath.row > 2 && indexPath.row <10) 
    { 
     NSLog(@"I am Selectin the row"); 

     UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
     if (cell.accessoryType == UITableViewCellAccessoryNone) 
     { 
      cell.accessoryType = UITableViewCellAccessoryCheckmark; 

     } 
     else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
     { 
      // NSLog(@"Selected Accessory Is %d",cell.accessoryType); 
      cell.accessoryType = UITableViewCellAccessoryNone; 
     } 
    } 

    [self.tableview deselectRowAtIndexPath:indexPath animated:YES]; 
} 

- (void)savedata:(id)sender 
{ 
} 

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

+0

Поддержание массива для проверки отмеченного indexpath.row, добавьте указатель path.row в массив, когда вы проверяете новую строку, и удалите этот указатель path.row, когда вы отбрасываете строку из массива. – Madhu

+0

Возможно, вы должны [проверить этот ответ] (http://stackoverflow.com/questions/5959950/iphone-uitableview-cellaccessory-checkmark). – brainforked

ответ

0

Сделать цикл:

NSMutableArray *mutArray = [[NSMutableArray alloc] init]; 

for(i = 0;i <= self.rowCount-1;i++) 
{ 

UITableViewCell *cell = [tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]]; 

if (cell.accessoryType == UITableViewCellAccessoryCheckmark) 
{ 
      [mutArray addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 
} 

} 
NSLog(@"Array: %@", mutArray); 
+0

Где я должен хранить этот код? –

+0

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

+0

u означает действие, где я хочу nslog ?? и какой должна быть строка? –

3

Не используйте UITableView для хранения данных. Ячейки повторно используются, так что не надежный способ определить, какие элементы вы выбрали.

Вы можете сохранить, если элемент выбран в массиве, например. Затем в вашем cellForRowAtIndexPath определите, должна ли отображаться галочка. В didSelectRowAtIndexPath вы обновляете модель (ваш массив) и запрашиваете перезагрузку для конкретной ячейки.

Это приведет к лучшему разделению MVC.

EDIT: добавлен пример для UITableView вещи

// for this example we'll be storing NSIndexPath objects in our Model 
// you might want to use a @property for this 
NSMutableSet *model = [NSMutableSet set]; 


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

    ... 

    if([model containsObject:indexPath]) { 
     cell.accessoryType = UITableViewCellAccessoryCheckmark; 
    } 
    else { 
     cell.accessoryType = UITableViewCellAccessoryNone; 
    } 

    ... 
} 


-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    ... 

    // update the model 
    if([model containsObject:indexPath]) { 
     [model removeObject:indexPath]; 
    } 
    else { 
     [model addObject:indexPath]; 
    } 

    // request reload of selected cell 
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation: UITableViewRowAnimationFade]; 

    ... 

} 

Теперь это должно быть довольно легко регистрировать все выбранные элементы, без необходимости использовать UITableView: это все в вашей модели прямо сейчас!

+0

Я не понимаю, что вы хотите сказать. –

+0

Вид (mVc) предназначен для отображения данных, а не для их хранения. Только установив флажок в ячейке, вы в основном сохраняете данные в своем представлении. Вы не должны: хранить данные в модели (Mvc). Я обновляю свой ответ с помощью некоторого кода. – fguchelaar

+0

ok Я получаю вывод и, кажется, preety well bt, я не получаю желаемый результат ...... вывод, который я получаю с этим кодом, примерно такой .:- " {длина = 2, путь = 0 - 3} ", " {длина = 2, путь = 0 - 4} ", " {длина = 2, путь = 0 - 5} " , « {length = 2, path = 0 - 6}", тогда как я хочу, чтобы метка была на моем выходе ..... –

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