从设置视图控制器管理Tableview属性

时间:2012-09-03 10:48:30

标签: objective-c uitabbarcontroller uiswitch

我有UITabBarViewController,其中包含2个观看次数。 第一个视图有UITableView,其中包含1个部分和5个行。 第二个视图也有一个UITableView,它有一个像UISwitches这样的设置选项。 我的问题是如何在设置视图中使用UISwitch显示和隐藏或从第一个视图中删除单元格?提前谢谢。

修改

此视频解释了我要做的事情(查看应用视图)

Press Here

3 个答案:

答案 0 :(得分:1)

每次更改UISwitch后,都应重新加载tableview。如: - 您将UISwitch的委托设置为UITabBarViewController(或控制事件的类) - 你应该存储你的tableview的细胞'变量中的数字 - 每次UISwitch更改后,此变量都会更改 - 变量更改后,您应该重新加载tableview

答案 1 :(得分:1)

您可以使用NSNotificationCenter

完成此操作 在您的firstView中,您可以编写如下代码:

 -(void)viewDidLoad{
 [[NSNotificationCenter defaultCenter] removeObserver:self];
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(modifyCell:) name:@"modifyCell" object:nil];
 }

   //make sure this is declared in your .h
 -(void)modifyCell:(NSNotification*)notif
  {
    if (notif) {
              //cellindex to modify
    NSString *cellIndex = [[notif userInfo] objectForKey:@"index"];
    [yourDataSource removeObjectAtIndex:[cellIndex intValue]]
    [yourTableView reloadData];
     }
  }

在你的第二个视图中:

  -(void)switchChanged
  {
     NSNotificationCenter *ncSubject = [NSNotificationCenter defaultCenter]; 
     NSDictionary* dict = [NSDictionary dictionaryWithObjectsAndKeys:@"indexNum",@"index", nil];
      [ncSubject postNotificationName:@"modifyCell" object:nil userInfo:dict];
      [ncSubject removeObserver:self];
  }

答案 2 :(得分:1)

在表视图控制器的viewWillAppear方法中,我将检查设置是否已更改。如果它已经改变,那么我将通过调用reloadData方法重绘单元格。 有时建议通过performSelectorOnMainThread调用reloadData:

[ self performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]

您的数据加载方法(numberOfSectionsInTableView,numberOfRowsInSection,cellForRowAtIndexPath等)必须相应地考虑设置值。