我对目标c和ios开发完全不熟悉,我只是尝试导航到我的故事板上的新场景,并在导航时将UIlabel的文本更改为某些内容。
我设置的方式是我有一个View控制器和一个tableview控制器,每个都有自己的头和实现文件。我正在使用视图控制器上的按钮中的segue导航到tableview。
我确实读过这个堆栈溢出帖子(How do I pass information between storyboard segues?),它解释了如何在segue上传递值并实现它:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
NSLog(@"prepareForSegue: %@", segue.identifier);
if([segue.identifier isEqualToString:@"navtotablebut"])
{
TableViewController *testcontroller = segue.destinationViewController;
testcontroller.testpass.text = @"Testing123";
NSLog(@"%@",[NSString stringWithFormat:@"testpass has been changed to %@", testcontroller.testpass.text]);
}
}
日志验证这个segue方法是否被调用,并且能够正确识别我给它的id(navtotablebut)。然后我尝试将我的tableview控制器上的UIlabel文本属性的值设置为一个简单的字符串“Testing123”。然而,这种变化不仅不会反映在新屏幕上,而且之后我的print语句似乎认为testcontroller.testpass.text等于(null)。
我在这里做了一些可怕的错误吗?
答案 0 :(得分:2)
在绘制“TableViewController”视图之前,在testcontroller
中设置标签TableViewController
的值。
请注意:如果使用Autolayout,请更新viewdidLoad
或viewDidLayoutSubviews
中的视图。
最好的方法是将您的值作为字符串传递给其他视图控制器,然后填充。
答案 1 :(得分:1)
只需在prepareForSegue:方法中获取对目标视图控制器的引用,并将所需的任何对象传递给那里。这是一个例子......
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"YOUR_SEGUE_NAME_HERE"])
{
// Get reference to the destination view controller
YourViewController *vc = [segue destinationViewController];
// Pass any objects to the view controller here, like...
[vc setMyObjectHere:object];
}
}
还使用performSegueWithIdentifier:sender:方法根据选择或按下按钮激活转换到新视图。
// When any of my buttons are pressed, push the next view
-(IBAction)buttonPressed:(id)sender
{
[self performSegueWithIdentifier:@"MySegue" sender:sender];
}
// This will get called too before the view appears
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"MySegue"]) {
// Get destination view
SecondView *vc = [segue destinationViewController];
// Get button tag number (or do whatever you need to do here, based on your object
NSInteger tagIndex = [(UIButton *)sender tag];
// Pass the information to your destination view
[vc setSelectedButton:tagIndex];
}
}
答案 2 :(得分:0)
在TableViewController中,您需要创建属性
TableViewController.h
@property (nonatomic, strong) NSString *subject;
你传递的价值就是这样,
在ViewController中,
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier]isEqualToString:@"Detail"])
{
TableViewController *testcontroller = segue.destinationViewController;
testcontroller.testpass.text = @"Testing123";
detailView.subject = testcontroller.testpass.text;
}
}