代码之家  ›  专栏  ›  技术社区  ›  iPhoneDollaraire

如何用ui按钮更新视图

  •  0
  • iPhoneDollaraire  · 技术社区  · 15 年前

    我在导航栏和容器视图的工具栏子视图中有按钮 enabled 属性取决于应用程序状态。当前按钮设置在 viewWillAppear ,因此,如果我离开视图然后返回,则会发生正确的事情。我想 [containerView setNeedsDisplay] 会成功的,但不会。

    (容器视图中有uitextviews,可以在以下情况下强制更新 textView.text 但应用程序的逻辑是这样的,当状态改变时,很难显式地更新所有正确的按钮。)

    1 回复  |  直到 15 年前
        1
  •  0
  •   imnk    15 年前


    您可以在代码中的任何位置更改导航栏和工具栏按钮的状态。对于视图的初始设置,像您所做的那样,在视图中放置一些代码将消失,视图将出现是很有用的。

    例如,如果希望在向文本字段中添加文本后,以编程方式将导航栏上的按钮从“取消”更改为“输入”,则只需初始化一个新的uibarbuttonem并将其粘贴到原来的位置即可。假设您在视图中添加了“取消”按钮,则会显示为…

    - (void)viewWillAppear:(BOOL)animated {
    self.navigationItem.rightBarButtonItem = 
    [[[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStylePlain target:self action:@selector(cancelAction)] autorelease];
    }
    

    然后在代码的其他地方,您可以简单地通过以完全相同的方式创建一个新的导航项来覆盖该导航项。但是,很明显,您会想给它一个不同的标题(这里是我的示例中的“enter”)或者一个不同的操作。


    就工具栏而言,uinavigationcontrollers可以轻松处理更改。这是因为每个uinavigationcontroller+uiviewcontroller组合都有一个内置的工具栏,只是除非您特别要求,否则它们不会显示它。 最好的方法是为uiviewcontroller设置工具栏项,然后要求navigationcontroller根据需要显示/隐藏工具栏。

    例如,假设我在uiviewcontroller的初始化方法中创建了三个uibarbuttonem实例…然后我需要做的就是把它们放在一个数组中,并将该数组中的项目分配给工具栏,例如。

    [self setToolbarItems:[NSArray arrayWithObjects:button1, button2, button3, nil] animated:NO];
    

    然后在viewwillappear(或viewdiddappear)方法中,我可以使用navigationcontroller来显示工具栏:

    [self.navigationController setToolbarHidden:NO animated:YES];
    

    只需记住在视图消失时执行相反的操作(即相同的调用,但settoolbarhidden:yes)。 在uiviewcontroller代码的任何一点上,您都可以使用与初始化中相同的方法更改按钮,即[自设置工具栏项:……]。