2011-05-04 88 views
0

我想知道如何從子類調用我的ViewController中的方法?從子類調用ViewController中的方法

我想從我的subClass.m文件的viewDidLoad中調用該方法,但Xcode中告訴我的部件,其請求「的viewController」的東西不是一個結構或聯合:

[self.viewController tabAdd:@"Extra" inColour:@"Green" withReference:0]; 
[self.viewController resetTabsView]; 

在我的viewController我定義方法如下:

-(void)tabAdd:(NSString *)newTabTitle inColour:(NSString *)newTabColour withReference:(NSUInteger)newTabReference; 
-(void)resetTabsView; 

感謝您的幫助!


這是我如何設置VC和子...

(1)TabsEdit.H:

#import <UIKit/UIKit.h> 
#import "MyViewController.h" 

@interface TabsEdit : MyViewController <UITextFieldDelegate> { 

    IBOutlet UITextField *enterTitle; 

} 

@property (nonatomic, retain) UITextField *enterTitle; 
@end 

(2)MyViewController.H:

// 

#import <UIKit/UIKit.h> 
#import "TabsEdit.h" 

@class TabsEdit; 

@interface MyViewController : UIViewController <UITextViewDelegate, UITextFieldDelegate> { 

// ... 

//@property (nonatomic, retain) TabsEdit *tabsEdit; 

in M.文件:

@synthesize tabsEdit; 

而且我初始化這樣的:

TabsEdit *tEdit = [[TabsEdit alloc] initWithNibName:@"TabsEdit" bundle:nil]; 
self.tabsEdit = tEdit; 
[self.view addSubview:tEdit.view]; 
[tEdit release]; 

回答

1

根據以上評論,您需要您的子類來說出它是什麼子類。界面的第一行應該是:

@interface TabsEdit : MyViewController <UITextFieldDelegate> { 

然後作爲@DavidNeiss說使用[自tabAdd:...]在子類。一個類可以使用「self」調用它自己的所有方法以及屬於其父類的所有方法。

如果您用自己的方法覆蓋父類的方法,並且需要調用父類的方法而不是您自己的方法,則使用「super」。例如,當你爲你的子類定製了一個自定義的(id)init時,你應該在某處調用[super init]來處理父類在 - (id)init中做的任何設置。

+0

如果我這樣做,我得到錯誤信息:無法找到'MyVieController','TabsEdit'的超類的接口聲明... – 2011-05-04 20:41:08

+1

請確保您在接口 – Dancreek 2011-05-04 20:44:21

+0

開始時包含#import「MyViewController.h」仍然沒有運氣... #import ...我仍然得到相同的錯誤信息:無法找到'MyViewController','TabsEdit'的超類的接口聲明... – 2011-05-04 20:49:52

2

[自tabAdd :. .....]

你是從VC派生出來的,所以直接調用方法。

我想你也可以做[super tabAdd:.....]。

+0

謝謝,但我得到警告'subClass'可能不會響應-tabAdd:...此外,應用程序與以下日誌崩潰: - [TabsEdit tabAdd:inColour:withReference:]:無法識別的選擇器發送到實例0x4b380b0 2011-05-04 21:01:35.626 MoleNotes [78413:207] ***終止應用程序,由於未捕獲的異常'NSInvalidArgumentException',原因:' - [TabsEdit tabAdd:inColour:withReference:]:無法識別的選擇器發送到實例0x4b380b0 ' – 2011-05-04 20:03:16

+1

我剛試過,爲我工作。你現在調用函數的代碼行是什麼樣的?那裏可能有錯。 – DavidN 2011-05-04 20:19:26

+1

你可以發佈你的VC和子類的接口嗎?我懷疑你沒有正確設置子類。 – Dancreek 2011-05-04 20:19:56

0

如果你想從一個子類中調用父類的方法只是去:

[super methodName]; 

我不明白爲什麼你可以去[self methodName];無論是。子類應該可以訪問所有的超類方法。