使用按下按钮和数组行的标识来执行 segue

Posted

技术标签:

【中文标题】使用按下按钮和数组行的标识来执行 segue【英文标题】:Using identity of pressed button & array row to perform segue 【发布时间】:2013-01-22 16:39:33 【问题描述】:

我刚从 ios 和目标 C 开始,我在当前应用程序中尝试完成的一件事是根据表格视图中行的标识和按钮的标识执行 segue按下(这些是导航栏顶部的按钮)。我感到困惑的原因是,通常当我想用多个按钮做某事时,我对两个按钮都有一个 IBAction,然后使用发件人标签。但是,在这种情况下,我实际上想要做的是有类似的东西(如果 indexPath.row ==0 && 按下按钮的身份 ==0)self performSEguewithIdentifier sender 现在我不确定 if 语句的第二部分是什么,如果你能帮我写一些代码,我将非常感激。

谢谢

【问题讨论】:

这是可行的。澄清一下,用户首先选择一个 tableview 行,然后在导航栏中按下一个 barbutton? 其实恰恰相反。他首先按下了一个条形按钮,然后选择了一个 tableview 行。现在事情是这样的,尽管我的两个栏按钮都显示了相同的 tableviewrows(两种情况下表格的文本内容相同),但 segues 需要根据按下的按钮而有所不同。 【参考方案1】:

如果用户需要先按下按钮,然后选择一行,则不能像问题中那样使用复合 if 语句,因为尚未选择该行。一种方法是让您的按钮方法在 ivar(基于其标记)上设置一个值,然后您将其签入 didSelectRowAtIndexPath:。所以,如果你有一个 int ivar,buttonPressed,你的 IBAction 可能是:

@implementation ViewController 
    int buttonPressed;


-(IBAction)buttonPressed:(UIButton *) sender 
    buttonPressed = sender.tag;

然后,在 didSelectRowAtIndexPath 方法中:

-(NSIndexPath *)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
    if(buttonPressed == 1) 
        // do something with indexPath.row info
        // perform whichever segue
    else if (buttonPressed == 2) 
       // do something with indexPath.row info
        // perform whichever segue
    

【讨论】:

这看起来很完美,正是我想要的!你能告诉我如何声明 int ivar 吗? 嗯,我仍然遇到错误。这就是我设置它的方式:-(IBAction)ButtonPressed:(id)sender NavButtonPressed=sender.tag; 我得到的错误是: “语义问题。在“__strong id”类型的对象上找不到属性“标签”。 @DavidWest,将 IBAction 名称中的 (id) 更改为 (UIButton *),就像我在回答中显示的那样。 哦,没关系,我只是将它编辑为 NavButtonPressed=[sender tag] 并且它有效。虽然我知道我的基础知识在这里完全错误,但点符号不应该也能正常工作吗? @DavidWest,id 仅表示任何对象。当您使用点表示法时,编译器似乎将其视为属性,因此它会给您一个错误,因为 id 不是特定的东西,并且没有属性。如果您使用方括号表示法,编译器就知道这是一个方法,并且假定您知道自己在做什么,并允许您编写它。当然,如果对象实际上没有实现该方法,它会在运行时崩溃。明确键入您的对象总是更好,除非您不知道您可能会得到什么样的对象。

以上是关于使用按下按钮和数组行的标识来执行 segue的主要内容,如果未能解决你的问题,请参考以下文章

准备 segue 数组时不包含数据(使用 swift)

如何使 segue 等待功能在按钮按下时完成?

使用经过验证的 segue 标识符字符串调用 performSegueWithIdentifier 时崩溃

使用segue按下按钮后禁用PageViewController - Swift 4

如何在 Swift 中通过 Segue 将数据传递到下一个视图?

两个不同的按钮对同一个视图控制器执行 segue,但希望通过一个按钮禁用用户交互以进行 segue