如何使用 prepareForSegue 从 UIButton 传递字符串

Posted

技术标签:

【中文标题】如何使用 prepareForSegue 从 UIButton 传递字符串【英文标题】:how to pass a string from a UIButton using prepareForSegue 【发布时间】:2012-05-01 05:29:54 【问题描述】:

我从 UIButton 向我的下一个 UITtableviewcontroller 发送一个字符串,该字符串是 UIButton 标题(星期一...星期日),NSPredicate 使用该字符串按天过滤我的表信息。

@property (nonatomic, weak) NSString *dayOTW;

- (IBAction)selectDay:(UIButton *)sender 
UIButton *dayW = sender;
dayOTW = dayW.titleLabel.text;
NSLog(@"button press = %@", dayOTW);


2012-05-01 06:23:21.731 passingdata[99957:fb03] button press = Monday

然后转到我的下一个屏幕

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"SendWeekDay"])

    // Get reference to the destination view controller
    ViewController *vc = [segue destinationViewController];

    // Pass any objects to the view controller here, like...
    vc.dayOTW = dayOTW;
   

第一次选择按钮时,我的表格中没有显示任何信息,如果我返回并再次选择按钮,我的表格将显示当天的正确信息。

我做错了什么?

与上述有关的另一个问题。 我一周每天都有 7 个 UIButtons,如何用一个 segue 从所有 UIButtons 中分离?

谢谢

【问题讨论】:

您能否编辑您的问题标题以使其更具体? 看到这个答案:***.com/a/31934786/3681880 【参考方案1】:

在您的 IBAction 方法之前调用 segue,因此在您第一次单击它时不会设置该变量。

如果 segue 连接到您的按钮,那么它将是 prepareForSegue 中的sender,因此您实际上并不需要 action 方法。只需在 prepareForSegue 中获取标题即可:

UIButton *dayButton = (UIButton*)sender
vc.dayOTW = sender.titleLabel.text;

要将相同的 segue 连接到所有按钮,您必须从每个按钮上按住 ctrl 并拖动,但要为所有 segue 提供相同的标识符。这在故事板上看起来很乱,所以另一种方法是直接从源视图控制器创建一个单一的 segue,并在 action 方法(在这种情况下你需要它,并且将连接到你的所有按钮)调用 @987654323 @:

-(IBAction)dayButtonPressed:(UIButton*)sender

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

这会将按钮作为发送者传递给performSegue 方法,因此您可以使用上面列出的代码。

【讨论】:

如何检查是否先调用了 segue?还是我需要先初始化字符串?我稍后再试试。 您可以根据需要在每个方法中添加一个日志,但我的回答是您不需要字符串变量-该按钮可用作prepareForSegue中的发送者,所以只要从它那里获取文本。 当我点击 Button 时出现此错误。 '2012-05-01 11:41:33.097 传递数据 [23451:fb03] 嵌套推送动画可能导致导航栏损坏 2012-05-01 11:41:33.455 传递数据 [23451:fb03] 在意外中完成导航转换状态。导航栏子视图树可能会损坏。 2012-05-01 11:41:33.457 传递数据 [23451:fb03] 对 的开始/结束外观转换的不平衡调用。它正在传递信息,但创建了一个额外的视图,我需要单击两次才能访问我的 rootviewController,任何想法。谢谢 你还没有连接到按钮的segue,是吗(所以它执行了两次segue)?除此之外,我不确定 - 你应该问一个新问题。 +1 对不起,我的错..它已连接..非常感谢您的帮助

以上是关于如何使用 prepareForSegue 从 UIButton 传递字符串的主要内容,如果未能解决你的问题,请参考以下文章

从最初的 View Controller 如何将 acriss 转移到 UITabBarController 并使用 prepareForSegue

如何使用 prepareForSegue 方法从视图控制器推送到导航视图控制器?

如何从 prepareForSegue 调用“自我”属性:?

使用导航控制器在“prepareForSegue”中设置数据

如何通过prepareForSegue:一个对象

Swift:使用 prepareForSegue 将 UIView 容器的高度设置为嵌入式 UITableView 的高度