我不擅长用大段落解释,所以希望我要说的(应用程序将起作用的步骤)将有助于我的问题。
步骤:
1。打开应用。查看FirstViewController
2。按下代号为“initialButton”的按钮
3。切换到SecondViewController
4。按下按钮文本命名为“选择我”
5。退回到FirstViewController,让initialButton文本说“选择我”
FirstViewController.h
@interface FirstViewController : UIViewController
@property IBOutlet UIButton *initalButton;
@end
FirstViewController.m
- (void)viewWillAppear:(BOOL)animated {
self.initalButton.titleLabel.text = name;
}
SecondViewController.m
selectMe = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[selectMe setFrame:CGRectMake(100, 100, 100, 100)];
[selectMe setTitle:@"Select Me" forState:UIControlStateNormal];
[selectMe addTarget:self action:@selector(someMethod:) forControlEvents:UIControlEventTouchUpInside];
- (void) someMethod: (id)sender {
if (sender == selectMe) {
self.selectMe.titleLabel.text = name;
[self.navigationController popViewControllerAnimated:YES];
}
}
(NSObject)Background.h
NSString *name;
我的意图是当按下selectMe按钮时,应用程序返回一个ViewController,initalButton的文本显示在SecondViewController上按下的任何按钮。应用程序中的所有内容都在工作,除了让initialButton显示在SecondViewController上按下的按钮的文本(从上面的步骤5)。
答案 0 :(得分:0)
您应该在2个控制器之间设置委托关系,以便在点击第二个控制器中的按钮时,它会在弹出之前使用选择信息回叫第一个控制器。然后第一个控制器可以在重新显示之前更新其状态。
答案 1 :(得分:0)
您要做的是设置委托关系。这允许您访问以前活动的ViewController中的属性。
我假设你在这个例子中使用故事板,但基本流程是这样的。在执行segue之前,调用prepareForSegue:sender:
,我们首先检查segue是否正在使用SecondViewController。如果是,那么我们就可以进入并访问其属性。在这种情况下,我们想要的是委托。通过将self
分配给委托,这允许我们在FirstViewController中执行任何我们想要的属性,同时我们仍然在SecondViewController中,因为我们现在有一个对父视图控制器的引用。好吧?你可以更改属性,运行方法调用等。这是非常有用的东西,你可能会使用它很多。
顺便说一下,您可能希望使用UIButton的setTitle:forState:
方法来更改标题名称。
我不知道这段代码是否会编译,因为它依赖于你所做的我看不到的东西,但你至少可以理解它应该如何工作。祝你好运!
// FirstViewController.h
@interface FirstViewController : UIViewController
@property IBOutlet UIButton *initialButton;
@end
// FirstViewController.m
#import "SecondViewController.h"
- (void)viewWillAppear:(BOOL)animated
{
[self.initialButton setTitle:name forState:UIControlStateNormal];
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIViewController *viewController = segue.destinationViewController;
if ([viewController isKindOfClass:[SecondViewController class]) {
SecondViewController *controller = (SecondViewController *)viewController;
controller.delegate = self;
}
}
// SecondViewController.h
@class FirstViewController;
@interface SecondViewController : UIViewController
@property (nonatomic, strong) FirstViewController *delegate;
@end
// SecondViewController.m
- (void)viewDidLoad
{
selectMe = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[selectMe setFrame:CGRectMake(100, 100, 100, 100)];
[selectMe setTitle:@"Select Me" forState:UIControlStateNormal];
[selectMe addTarget:self action:@selector(someMethod:) forControlEvents:UIControlEventTouchUpInside];
}
- (void) someMethod: (id)sender
{
if (sender == selectMe) {
[self.delegate.initialButton setTitle:selectMe.titleLabel.text forState:UIControlStateNormal];
[self.navigationController popViewControllerAnimated:YES];
}
}