【问题标题】:Load UIViewController from a button inside a tableviewCell从 uitableviewCell 内的按钮加载 ViewController
【发布时间】:2013-03-13 14:51:56
【问题描述】:

我在 tableviewcell 内有一个按钮,它位于 tableview 内(显然),而 tableview 位于导航控制器内的 viewController 内

UINavigationCont --> ViewController1 --> UITableView --> UITableViewCell --> UIButton -->(从这个按钮的IBAction启动一个新的控制器)

我怎样才能做到这一点? 谢谢

- (IBAction)addButtonPressed:(UIButton *)sender {
    ViewController1 *detailViewController = [[ViewController1 alloc]init];

    [self.superview.delegate presentPopupViewController:detailViewController animationType:MJPopupViewAnimationFade];
}

【问题讨论】:

  • 您使用的是笔尖还是情节提要?
  • 您为什么要使用自己的按钮来执行此操作,而不是仅使用单元格选择的详细控制器或使用可以添加到单元格的附件按钮?这是执行此操作的“正常”方式,使用 didSelectRowAtIndexPath 或 tableView:accessoryButtonTappedForRowWithIndexPath:

标签: ios uitableview uinavigationcontroller uibutton


【解决方案1】:

您应该将导航逻辑放在控制器中,而不是单元格中(我想是这种情况,因为您已经调用了self.superview。将您的addDetailViewController 方法移动到您的视图控制器中,所有的麻烦都应该消失了。

【讨论】:

  • 这很简单,但是每个单元格都有一个按钮,所以这个按钮必须启动它。还是有别的办法?
  • 是的,您可以让所有按钮调用这个单一方法,并使用 superview(获取索引路径)通过它们访问单元格。或者,您可以像现在一样在单元类中拥有一个方法,但不要在那里调用任何导航代码,只需将调用转发到您的视图控制器(这样您也将知道索引路径)并管理在视图控制器中导航。
  • 如何转接电话?
  • 您只需调用该方法(这意味着您从单元格中对视图控制器有一个弱引用)。您可以将其作为委托,因此您将调用 [self.delegate pressedDetailButtonInCell:self],委托(您的视图控制器)必须实现其中包含 pressedDetailButtonInCell: 的协议。
  • 好的,我用另一种方式(但你的方式似乎更直接)我为单元格创建了一个索引属性,在 cellForIndex 中我设置了 index = index.row。然后我将该按钮的标签设置为此值。在我的 IBAction 中,我读取了标签,并从与该索引匹配的数组中加载相应的对象
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2017-08-30
相关资源
最近更新 更多