将一个UIButtons数组添加到navigationItem.rightBarButtonItem会导致NSInvalidArgumentException

时间:2011-11-26 16:23:37

标签: iphone xcode cocoa-touch

我正在尝试在导航栏的右侧添加一个包含2个按钮的数组,但是在运行代码时出现异常。

'NSInvalidArgumentException',原因:' - [UIButton isSystemItem]:无法识别的选择器发送到实例

我的代码非常简单:

   UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(0,0,100,45)];
   label.backgroundColor=[UIColor clearColor];
   label.text = @"Test 2 Buttons";

   UIButton *button1 = [UIButton buttonWithType:UIButtonTypeCustom];
   button1.frame = CGRectMake(00.0f, 0.0f, 32.0f, 32.0f);

   UIButton *button2 = [UIButton buttonWithType:UIButtonTypeCustom];
   button2.frame = CGRectMake(00.0f, 0.0f, 32.0f, 32.0f);

   NSArray *rightBarButtons = [[NSArray alloc] initWithObjects:button2, button1, nil];


   UINavigationItem* navItem = self.navigationItem;
   navItem.titleView = label;
   navItem.rightBarButtonItems = rightBarButtons;
   [rightBarButtons release];
   [label release];

我在iPhone 5.0模拟器上运行它。 任何的想法?? 提前致谢。 人

3 个答案:

答案 0 :(得分:29)

您无法直接添加UIButtons。您需要先将它们包装为UIBarButtonItems - 因为您只传递数组,所以没有编译器警告。

使用initWithCustomView:创建条形按钮项目,将按钮作为自定义视图传递。或者,根据按钮中的内容,直接创建条形按钮项。

答案 1 :(得分:10)

这里的技巧是使用UIBarButtonItem对象而不是UIButton对象。可以从UIButtons创建UIBarButtonItems,如下所示:

UIBarButtonItem *myItem = [[UIBarButtonItem alloc] initWithCustomView:uibuttonObject];

然而,当UIBarButtonItems看起来很漂亮时,在导航栏中使用UIButton通常是一个坏主意。考虑访问UIBarButtonItem Class Reference

答案 2 :(得分:1)

你打算给它一组UIBarButtonItem个对象而不是UIButton对象。请注意,UIBarButtonItem既不继承UIButton,也不继承UIView。