2016-02-18 63 views
-2

我有一個方法,它是bool並返回值YES。此方法在BViewController中聲明,有沒有辦法在我訪問CViewController中的此方法並將值設置爲NO更改布爾方法的值

-(BOOL)prefersNavigationBarHidden { 
    return YES; 
} 

這樣的事情可能嗎?

[self prefersNavigationBarHidden:NO ]; 

我知道我可以做這樣的事情:

-(BOOL)prefersNavigationBarHidden{ 
     return NO; 
    } 

但這種方法必須建立在一個特定事件觸發

感謝幫助和快速解答

+2

你爲什麼從C調用方法? – Wain

+1

你爲什麼不使用財產? – puzzler

+0

@我必須改變某個特定事件的值,並且必須在視圖控制器C中調用它。 – TamoDaleko

回答

3

在目前,您的功能是硬編碼的,並且始終返回YES。如果您希望能夠從視圖控制器B或其他位置更改該值,則需要將該值存儲在某個位置。

你可以將它保存爲一個屬性,而不是:

@property (assign, nonatomic) BOOL prefersNavigationBarHidden; 

和揭露它的視圖控制器B的.h文件中這樣視圖控制器C將有機會獲得它,就能改變它。

+0

嘿謝謝你的回答分配,所以我宣佈這個屬性我現在如何改變值? – TamoDaleko

+0

假設視圖控制器C可以訪問視圖控制器B,則可以像使用點符號一樣訪問它,就像任何其他屬性一樣。作爲一個方面說明,就像@Wain提到的那樣,我必須建議在兩個視圖控制器之間做這些東西是不好的做法。 – Aviram

+0

@Aviram我認爲問題的關鍵是,這個傢伙現在不怎麼做...... – Mingebag

0

它取決於您想要使用該方法的上下文。如果它是一種用於告訴視圖控制器是否可以顯示導航欄的方法,則一種選擇是創建一個超類,視圖控制器C從該類繼承,並在那裏定義該方法。然後,在視圖控制器C中重寫應該從超類繼承的方法。像這樣:

@interface MySuperclass : UIViewController 
- (BOOL)prefersNavigationBarHidden; 
@end 

@implementation MySuperclass 
-(BOOL)prefersNavigationBarHidden { 
    return YES; 
} 

/* 
    Use the value returned by the method to achieve what you want 
    with that boolean value 
*/ 
@end 

//-------------------- 

@interface ViewControllerC : MySuperclass 
@end 

@implementation ViewControllerC 
- (BOOL)prefersNavigationBarHidden { 
    return NO; // return no for example 
} 
@end 

它可能不是你的情況,但它是給你一個想法。正如我告訴你的,這取決於你想要達到的目標。