viewWillAppear 是如何工作的?
Posted
技术标签:
【中文标题】viewWillAppear 是如何工作的?【英文标题】:How does work viewWillAppear? 【发布时间】:2013-01-25 14:39:35 【问题描述】:我的 viewWillAppear 方法调用“-(void)doSomething”。
- (void)doSomething
Y4AppDelegate * delegate = (Y4AppDelegate *)[[UIApplication sharedApplication] delegate];
if(delegate.booSomeValue == 0)
UIButton * aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[aButton setFrame:CGRectMake(20,360,280,40)];
[aButton setTitle:@"Title"
forState:UIControlStateNormal];
[aButton addTarget:self
action:@selector(mySelector)
forControlEvents:UIControlEventTouchDown];
[self.view addSubview:aButton];
它可以工作,但 aButton 仍然可见。我该怎么做才能隐藏aButton?我有三个 UIViewController。在第三个中,我将 delegate.booSomeValue 设置为 true。当我回到之前的 UIViewController 时,我调用了这个 viewWillAppear,但是 aButton 是可见的。我想隐藏它。
【问题讨论】:
【参考方案1】:问题是你添加了一次,当你回到它时,你并没有添加第二个,但是你添加的第一个仍然存在,所以你必须删除它。
为此,您首先需要创建一个属性来存储按钮,并检查它是否存在
if ( ... show button condition ... )
if (!aButton)
... create and show button ...
else
if (aButton)
[aButton removeFromSuperview];
aButton = nil;
【讨论】:
感谢您对创建属性的建议。我是 Objective-C 的新手。在 Objective-C 中思考对我来说仍然很困难。我来自php。再次感谢您。【参考方案2】:将此代码移至 viewDidLoad
- (void)viewDidLoad
[super viewDidLoad]
UIButton * aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
aButton.tag = 101;
[aButton setFrame:CGRectMake(20,360,280,40)];
[aButton setTitle:@"Title"
forState:UIControlStateNormal];
[aButton addTarget:self
action:@selector(mySelector)
forControlEvents:UIControlEventTouchDown];
[self.view addSubview:aButton];
还有
- (void)doSomething
Y4AppDelegate * delegate = (Y4AppDelegate *)[[UIApplication sharedApplication] delegate];
UIButton * aButton = (UIButton*)[self.view viewWithTag:101];
aButton.hidden = delegate.booSomeValue;
【讨论】:
好答案。我更喜欢伊斯梅尔的解决方案。他回答了我的问题,你给了我另一个解决方案。谢谢你。这两个答案对我都有用。 =( *** 让我可以只接受一个作为正确答案。对不起。 @SimoneDemoGentili 没关系。我很高兴你的支持:)以上是关于viewWillAppear 是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
viewWillAppear 在 4.3 中没有从 UITabBarController 启动,但在 5.0 中可以正常工作
viewWillAppear 和 viewDidAppear 之间的操作?