【问题标题】:How to change a UIBarButtonItem in a UINavigationBar如何更改 UINavigationBar 中的 UIBarButtonItem
【发布时间】:2010-04-03 04:41:18
【问题描述】:

我正在尝试设置可以编辑的项目列表。我有一个主视图,顶部有一个 UINavigationBar,下面有一个 UITableView。我想让我的“编辑”按钮在点击时变为“完成”按钮,但我不知道该怎么做。

如果我可以在代码中做到这一点(而不是界面构建器),我可以替换它,但我什至做不到。我见过一些使用 [self.navigationItem] 的代码,但在我的例子中,self 是一个 UIView。

当我不想导航时使用 UINavigationBar 也感觉有点奇怪(这只是一页),但我想要一个带有标题和按钮的工具栏,所以我不认为真的有一个选择。

【问题讨论】:

    标签: iphone objective-c cocoa-touch uikit


    【解决方案1】:

    我创建了一个可以从“编辑”更改为“完成”的按钮。这是更多 iPhone 开发书籍中的提示。

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        UIBarButtonItem *editButton = self.editButtonItem;  
        [editButton setTarget:self]; 
        [editButton setAction:@selector(toggleEdit)]; 
        self.navigationItem.leftBarButtonItem = editButton; 
    }
    

    还有方法toggleEdit

    - (IBAction)toggleEdit { 
        BOOL editing = !self.tableView.editing; 
        self.navigationItem.rightBarButtonItem.enabled = !editing; 
        if (editing) {
            self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Done", @"Done");
            //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone
            self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStyleDone;
        } else {
            self.navigationItem.leftBarButtonItem.title = NSLocalizedString(@"Edit", @"Edit"); 
            //Added in the edition for this button has the same color of the UIBarButtonSystemItemDone
            self.navigationItem.leftBarButtonItem.style = UIBarButtonItemStylePlain;
        }
        [self.tableView setEditing:editing animated:YES]; 
    } 
    

    那么你不需要替换它们中的任何一个。

    【讨论】:

    • 啊,是的,看起来不错。不过,我认为您不会以这种方式获得那种漂亮的“完成”样式,因为按钮的颜色略有不同。
    • 现在随着样式的改变,这段代码的按钮DONE正好等于UIBarButtonSystemItemDone。
    【解决方案2】:

    当你使用self.editButtonItem时,你不需要改变按钮的样式和文字,它是自动完成的。尝试删除该代码,它仍然可以工作:)

    【讨论】:

      【解决方案3】:

      在 IB 中设置导航按钮,并在 IB 中链接以下内容,并在头文件中创建一个名为 editOutlet 的出口和一个名为 editToggle 的操作,您的方法就像这样简单:

      -(IBAction) editToggle:(id) sender {
      
      if (self.tableViewOutlet.isEditing == NO) {
      
          self.editOutlet.title = NSLocalizedString(@"Done", @"Done");
          self.editOutlet.style = UIBarButtonItemStyleDone;
          [self.tableViewOutlet setEditing:YES animated:YES];
      
      }else {
          self.editOutlet.title = NSLocalizedString(@"Edit", @"Edit"); 
          self.editOutlet.style = UIBarButtonItemStylePlain;
          [self.tableViewOutlet setEditing:NO animated:YES];
      
          }
      }
      

      【讨论】:

        【解决方案4】:

        知道了!看起来您可以使用 topItem 属性访问 UINavigationItem。只需像往常一样通读文档!

        【讨论】:

          【解决方案5】:

          你可以试试

          [self setValue:viewController.navigationItem forKey:@"_navigationItem"];
          [self.navigationController setNavigationBarHidden:YES animated:NO];
          [self.navigationController setNavigationBarHidden:NO animated:NO];
          

          【讨论】:

            猜你喜欢
            • 2011-11-29
            • 2012-06-14
            • 1970-01-01
            • 1970-01-01
            • 2012-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多