簡體   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