这是我的设置:
主页,个人资料页面,朋友页面。
在每个页面中,都有完全相同的segmentend按钮:[Home |个人资料|好友]
当我点击一个片段时,会调用一个segue并更改页面。
所以,当我在个人资料中时,已经选择了个人资料,我可以点击家庭或朋友;当我这样做,新页面被加载,新的段被选中,如果我愿意,我可以再次这样做。
在故事板中,我只有3页的"一吨"自定义segue(我使用自定义用于动画目的)。
在代码中,我有这个:
(void)moveToPage
{
if ([self.pageSwitch selectedSegmentIndex] == 1)
{
[self performSegueWithIdentifier:@"fromHomeToProfile" sender:self];;
}
if ([self.pageSwitch selectedSegmentIndex] == 2)
{
[self performSegueWithIdentifier:@"fromHomeToFriends" sender:self];;
}
}
- (IBAction)pageSwitchButton:(id)sender {
[self.pageSwitch addTarget:self
action:@selector(moveToPage)
forControlEvents:UIControlEventValueChanged];
}
这些名字是不言自明的。
我的问题是(我们正在努力): 当我点击一个片段时,它会被选中,但第一次没有任何反应。 如果我点击一个新的段(显然不是当前页面中的段),那么它的工作正常。 基本上,忽略第一个点击,然后第二个点击工作。 所以我必须点击一个页面,然后点击另一个不同的页面才能工作。
有什么想法吗?我有点坚持这个独特的问题:D
答案 0 :(得分:0)
好的,我确实发现了它;我只是不明白addTarget:action:forControlEvents
是如何运作的。
我们只需要把
[self.pageSwitch addTarget:self
action:@selector(moveToPage)
forControlEvents:UIControlEventValueChanged];
ViewDidLoad
中的,它运作得很好。它必须放在3页。
以下是我获得IRL的解释,如果我错了,请随意评论/添加内容:
addTarget:action:forControlEvents:
方法是您的网页所具有的行为。 “当发生这种情况时,请这样做”。因为它在我的Action中,页面只在我第一次点击时才学会了行为,并且知道如何在之后作出反应。为了让页面知道第一次做什么,它必须在创建的最早阶段学习行为,因此在ViewDidLoad
中。
因为Action中没有任何内容,您实际上可以完全删除它并删除故事板中的链接。你只需要使用outlet和moveToPage方法就可以了。
我希望这会有所帮助:)