gpt4 book ai didi

ios - Objective-c 如何从 UITableView 子类中进行 Segue

转载 作者:行者123 更新时间:2023-11-29 00:18:29 29 4
gpt4 key购买 nike

昨天我发布了this question所以我的问题的结构的所有代码都可以在那里找到。

问题......这一次

我是从其他语言转向 OBJ-C 的,一些 OOP 结构让我有点畏缩(我不喜欢将每个可能的函数打包到一个 UIViewController 中,有些人似乎这样做)。我原本打算做一个整页UITableViewController带有嵌入式NavigationController然而,这个项目的用例不允许我使用默认的导航栏。所以我必须放入自己的导航栏并使用常规的 UITableView (调整大小到几乎全屏)而不是更简单的选项,UITableViewController ...(我知道这一切都可以通过使用它来解决,但我不能)

相反,我有一个常规的 UIViewController拥有包含我自己的自定义属性 TasksTableView.h子类。子类扩展UITableView如我上面发布的链接所示。

实际问题是我似乎无法从这个 UITableView 内部继续或更改 View 。因为这样做的每个函数似乎都需要来自 UIViewController类。

我已经尝试过

didSelectRowAtIndexPath中调用手动segue我的方法UITableView子类。

[self performSegueWithIdentifier:@"profile" sender:sender];

这会产生一个明显的错误,告诉我 performSegueWithIdentifier这个类中不存在,它不存在,所以没关系。显然它属于UIViewController实例化我的类 UITableView子类...

我尝试导入实际呈现并保存 TableView 子类本身属性的 View Controller ,并尝试将 View 推送到堆栈。

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

UIViewController *target = [storyboard instantiateViewControllerWithIdentifier:@"SingleTaskViewController"];

AllTasksViewController *allTasksView = [[AllTasksViewController alloc] init];

if(target) {
[target setModalTransitionStyle:UIModalTransitionStyleCoverVertical];
[allTasksView presentViewController:target animated:YES completion:nil];
}
}

这给了我错误 Warning: Attempt to present <SingleTaskViewController: 0x7fa15d5359f0> on <AllTasksViewController: 0x7fa15d5363c0> whose view is not in the window hierarchy!
...尽管它必须位于层次结构中,因为它是包含并实例化此 UITableView 的 View .

我还尝试手动调用 didSelectRowAtIndexPath来自 UIViewController持有 UITableView子类,但又是同样的事情。它调用了,但显然因为我必须传递索引,所以是我选择它而不是表告诉我实际选择了什么。

我想要什么

我真的很想保留 UITableView子类独立于 UIViewController并且不将委托(delegate)方法和协议(protocol)引入 View Controller 。我更愿意将逻辑分开。我所需要的只是一种方法来继续或转换到相关的单一任务 View ,并发送一些有关按下的内容的数据。

最佳答案

那里有很好的教程,但基本思想是......

  • 主“ViewController”类 - 包含一个 TableView 和一个“手动”Segue 到“配置文件” View Controller
  • 为 TableView 分离数据源和委托(delegate)类
  • 自定义协议(protocol)/代理发送“didSelectRow”操作

当主 vc 加载时,它创建 Datasource 和 Delegate 类的实例,并将它们分配给 TableView 。

它还“符合”Delegate 类中的自定义协议(protocol)。这允许 Delegate 类在点击一行时“回调”到主 vc。

我整理了一个非常简单的示例来演示这种方法,可以在此处看到:https://github.com/DonMag/OCTableViewExample

关于ios - Objective-c 如何从 UITableView 子类中进行 Segue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44677847/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com