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 之间的操作?

理论知识整合笔记

SwiftUI |如何覆盖 viewWillAppear 等生命周期方法

如何在自定义导航中添加 viewwillappear 和 viewdidappear 之间的延迟?