如何使用 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] 对以上是关于如何使用 prepareForSegue 从 UIButton 传递字符串的主要内容,如果未能解决你的问题,请参考以下文章
从最初的 View Controller 如何将 acriss 转移到 UITabBarController 并使用 prepareForSegue
如何使用 prepareForSegue 方法从视图控制器推送到导航视图控制器?
如何从 prepareForSegue 调用“自我”属性:?
使用导航控制器在“prepareForSegue”中设置数据
Swift:使用 prepareForSegue 将 UIView 容器的高度设置为嵌入式 UITableView 的高度