繁体   English   中英

将UIButton添加到UIView或UINavigationBar不起作用

[英]adding UIButton to UIView or UINavigationBar doesn't work

我正在尝试使用以下命令将UIButton添加到UINavigationBar中:

 UIButton * addSource = [UIButton buttonWithType:UIButtonTypeCustom];
    [addSource setBackgroundImage:[UIImage imageNamed:@"addsource.png"] forState:UIControlStateNormal];  
    [addSource addTarget: self action:@selector(addSourceButton:) forControlEvents:UIControlEventTouchUpInside]; 
    [addSource setFrame: CGRectMake(115, 5, 32, 32)];  
    [navBar addSubview:addSource];
    [addSource release];

但是,这行不通吗? 当我注释掉setBackgroundImage并将其更改为setBackgroundColor时,我可以看到它,但似乎无法单击它(即:未触发将其设置为的操作)。 任何想法? 将其更改为UIImageView而不是UIButton也可以,我可以看到图像很好,因此可以澄清图像是否存在。

您不能将UIButton添加到UINavigationBar 使用UIBarButtonItem

从苹果文档:

与其他类型的视图不同,您不会将子视图直接添加到导航栏中。 而是使用导航项(UINavigationItem类的实例)来指定要显示的按钮或自定义视图。

和:

条形按钮项目是专门用于放置在UIToolbar或UINavigationBar对象上的按钮。 它从其抽象超类UIBarItem继承了基本的按钮行为。 UIBarButtonItem定义了其他初始化方法和属性,以用于工具栏和导航栏。

如果要在导航栏中的中心添加一些内容,为什么不这样做

navbar.titleView = addSource

”向导航栏添加内容

将导航栏用作独立对象时,您有责任提供其内容。 与其他类型的视图不同,您不会将子视图直接添加到导航栏中。 而是使用导航项(UINavigationItem类的实例)来指定要显示的按钮或自定义视图。 导航项的属性用于在导航栏的左侧,右侧和中心指定视图,并用于指定自定义提示字符串。

导航栏管理UINavigationItem对象的堆栈。 尽管该堆栈主要用于支持导航控制器,但是您也可以使用它来实现自己的自定义导航界面。 堆栈中最顶层的项目表示导航项目,其内容当前由导航栏显示。 您可以使用pushNavigationItem:animated:方法将新的导航项目推入堆栈,并使用popNavigationItemAnimated:方法将新项目弹出堆栈。 这两个更改都可以动画化,以使用户受益。

除了推送和弹出项目外,还可以使用items属性或setItems:animated:方法直接设置还可以使用堆栈的内容。 您可以在启动时使用这些方法将界面恢复到其先前的状态,或者一次推入或弹出一个以上的导航项。

如果将导航栏用作独立对象,则应将自定义委托对象分配给委托属性,并使用该对象来拦截来自导航栏的消息。 委托对象必须符合UINavigationBarDelegate协议。 委托通知使您可以跟踪何时从堆栈中推入或弹出导航项。 您将使用这些通知来更新应用程序的其余用户界面。

有关创建导航项的更多信息,请参见UINavigationItem类参考。 有关实现委托对象的更多信息,请参见UINavigationBarDelegate协议参考。

从UiNavigationBar类参考。

也请参考UIBarButoonItem-(id)initWithCustomView:(UIView *)视图。 pleae note UIbutton是uiview的子类

还请参考uinavbaritem的rightBarButtonItem属性– setLeftBarButtonItems:动画:– setLeftBarButtonItem:动画:– setRightBarButtonItems:动画:– setRightBarButtonItem:动画:和titleview。

您必须使用UIBarButton项目,以下是代码:

UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(dismissView)];
    self.navigationItem.leftBarButtonItem = cancelButton;
    [cancelButton release];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM