繁体   English   中英

从子类调用 ViewController 中的方法

[英]Calling a method in the ViewController from a subClass

我想知道如何从子类调用 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;

在 M. 文件中:

@synthesize tabsEdit;

我像这样初始化它:

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

[自我标签添加:。 .....]

你是VC派生的,所以直接调用方法。

我认为你也可以做一个 [super tabAdd: .....]。

根据上面的评论,您需要您的子 class 来说明它是什么子 class。 界面的第一行应该是:

@interface TabsEdit : MyViewController <UITextFieldDelegate> {

然后正如@DavidNeiss 所说,在子类中使用 [self tabAdd: ...] 。 class 可以使用“self”调用它自己的所有方法以及属于其父类的所有方法。

如果您用自己的方法覆盖了父类的方法,并且您需要调用父类的方法而不是您自己的方法,请使用“super”。 例如,当您为子类自定义 -(id)init 时,您应该在其中的某个地方调用 [super init] 以处理父 class 在其 -(id)init 中所做的任何设置。

如果您想从子类中调用超级 class 中的方法,只需 go:

[super methodName];

我不明白你为什么只能 go [self methodName]; 任何一个。 子类应该可以访问所有超类方法。

暂无
暂无

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

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