我的解决方案
我最终使用了委托模式
我做了一个从我的 UIViewController 拖动的 segue - 特别是从 viewController 图标(带有白色方块的橙色圆圈 - 从故事板视图下方的名称栏 - 尽管你也可以从侧边栏拖动)到我想继续的观点。
我需要从表格视图上的表格视图单元格触发此 segue。
表视图位
所以我在我的 tableview 头文件中声明了一个协议 - 称为 LocationTV.h - 如下
@protocol LocationTVSegueProtocol <NSObject>
-(void) makeItSegue:(id)sender;
@end
在此之下,我声明了一个属性来持有我的代表
@property (nonatomic, strong) id<LocationTVSegueProtocol> makeSegueDelegate;
为了真正触发 segue,我在 didSelectRowAtIndexPath 方法中调用了 makeSequeDelegate 上的 makeItSegueMethod
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.section) {
DLog(@"selected row %d",indexPath.row);
case dLocation:
{
if(indexPath.row == 2){
[_makeSegueDelegate makeItSegue:self];
} else if (indexPath.row == 7){
UIViewController 位
并将我的 UIViewController(名为 MultiTableHoldingVC)设置为实现该协议
@interface MultiTableHoldingView : UIViewController
<EnviroTVProtocol,LocationTVSegueProtocol> {
}
下面我在我的类方法列表中声明了协议方法(尽管我不确定这是必要的,因为编译器应该知道该方法,因为实现协议的声明本质上是实现此方法的承诺)
-(void) makeItSegue:(id)sender;
然后在我的 UIViewController 的实现文件中,我编写了基本上只是调用 preformSegueWithIdentifier 的方法
-(void) makeItSegue:(id)sender{
[self performSegueWithIdentifier:@"ChooseCountryNow"
sender:sender];
}
并将它们链接在一起,就像在头文件中一样,我声明了我的 tableView 实例,如下所示
@property (strong, nonatomic) IBOutlet LocationTV *dsLocationTV;
我必须将表视图委托属性设置为 self - 我在 UIViewControllers -(void)ViewDidLoad 方法中所做的
_dsLocationTV.makeSegueDelegate = self;
调用方法来调用方法似乎有点杂乱无章,而且 allprog 建议更简单(我一生都无法弄清楚为什么它会为我抛出错误),但这很好用。感谢 allprog 和 danypata 的建议。
希望这对那里的人有帮助