1

에 함께 IBOutlet으로의 UIViewController의 서브 클래스의 속성을 사용하여, 우리는이 서브 클래스 프로그래밍 initalized보다있는 jQuery과 속성이, MySuperClass를 호출합니다. 하위 클래스 MySuperClass to MySubclass하지만 이번에는 프로그래밍 방식이 아닌 인터페이스 작성기를 통해 tableview를 디자인하고 싶습니다. 내가 뭘 원하는지 비슷합니다. UIViewController 어떻게 작동합니까, UIViewController의 하위 클래스에 뷰 속성이 이미 초기화되어 있지만 IB에 가져 오면 인터페이스 작성기의 UIView 항목에 연결할 수 있습니다. 어떻게해야합니까?가 나는있는 UIViewController의 서브 클래스가 다른 서브 클래스

//interface 

#import <UIKit/UIKit.h> 

@interface MySuperClass : UIViewController <UITableViewDelegate, UITableViewDataSource> 

@property (nonatomic, strong) UITableView *tableView; 


//implementation 


#import "MySuperClass.h" 


@implementation MySuperClass 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 

     [self initializeProperties]; 

    } 
    return self; 
} 

- (void) awakeFromNib{ 

    [super awakeFromNib]; 

    [self initializeProperties]; 

} 

- (void) initializeProperties{ 

    self.tableView = [[UITableView alloc] initWithFrame: self.view.frame style: UITableViewStylePlain]; 
    self.tableView.separatorColor = [UIColor clearColor]; 
    self.tableView.backgroundColor = [UIColor clearColor]; 
    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 

    UIView *tableHeaderView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, self.view.frame.size.width, self.bannerView.frame.size.height+kBannerDistance)]; 

    tableHeaderView.backgroundColor = [UIColor clearColor]; 

    self.tableView.tableHeaderView = tableHeaderView; 


} 

답변

4

그냥 "재 선언"하위 클래스에서 @property :

내 슈퍼 클래스의 소스 코드는 이것과 같은 무언가이다.

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

@interface MySubClass : MySuperClass 

@property (nonatomic, strong) IBOutlet UITableView *tableView; 

@end 

컴파일러는 수퍼 클래스 속성을 참조하는 것을 이해하기에 충분히 영리하며 IB는 하위 클래스에 연결하는 데 문제가 없습니다.

+1

awakeFromNib에 의해 재 활성화되지 않았습니까? –

+0

IB에서 설정된'tableView'는'initializeProperties'에서 초기화 된'tableView'로 대체 될 것입니다. 그래서 기본적으로이 솔루션은 서브 클래스를 쓸모 없게 만들 것입니다. –

0

이것은 아마도 최선의 해결책은 아니지만 해결해야합니다.

MySuperClass.h- initFromSubClassWithNibName: bundle:;을 정의하고 이런 식으로 구현 :

- (id) initFromSubClassWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ 
    return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
} 

당신이 init 방법의 MySuperView의 구현을 탈출 UIViewController's implementation. You can take the same approach with awakeFromNib`를 사용할 수있는이 방법 MySubClass에. 이렇게하면 프로그래밍 방식으로 테이블 뷰가 작성되지 않습니다.

그러면 GuillaumeA의 대답을 받아 IB에서 tableView으로 초기화 할 수 있습니다.