2015-02-09 4 views
1

Я ищу несколько советов о том, как загрузить UIView из XIB-файла. Я попытался выполнить 5-е решение из этого tutorial.Загрузить UIView из XIB

Однако действия с кнопками не будут работать. Я настраиваю свой проект почти точно как учебник, но IBAction просто не будет вызван вообще. Я не уверен, что адаптивная компоновка вызвала эту странность или нет.

Будете ли вы любезны взглянуть на то, что произошло в моем проекте? Я создал небольшой проект только, чтобы получить кнопку работать и placed here.

Вот фрагмент кода:

@interface ProfileHeadingViewOwner : NSObject 
@property (nonatomic, weak) IBOutlet ProfileHeadingView *profileHeadingView; 
@end 

@implementation ProfileHeadingViewOwner 
@end 

static ProfileHeadingViewOwner* __owner = nil; 

@interface ProfileHeadingView() 
@property (nonatomic, weak) IBOutlet UILabel *profileName; 
@property (nonatomic, weak) UIViewController <ProfileHeadingViewDelegate> *delegateViewController; 
@end 

@implementation ProfileHeadingView 

+(void)presentInViewController:(UIViewController<ProfileHeadingViewDelegate>*) viewController 
{ 
    // Instantiating encapsulated here. 
    //ProfileHeadingViewOwner *owner = [ProfileHeadingViewOwner new]; 
    __owner = [ProfileHeadingViewOwner new]; 
    [[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:__owner options:nil]; 

    // Pass in a reference of the viewController. 
    __owner.profileHeadingView.delegateViewController = viewController; 


    // Add (thus retain). 
    [viewController.view addSubview:__owner.profileHeadingView]; 
} 

+(void)setProfileName:(NSString*)name { 
    __owner.profileHeadingView.profileName.text = name; 
} 


-(IBAction)editAvatarButtonPressed:(UIButton *)sender { 

    ////// THIS METHOD WON'T GET CALLED. WHY? /////// 

    [self.delegateViewController uploadProfileAvatar:self]; 
} 

editAvatarButtonPressed: метод не будет вызываться при нажатии на кнопку.

Заранее спасибо. Loc Pham

ответ

0

В вашем коде есть много проблем.

  1. Вы не назначая никакой ценности __owner.profileHeadingView
  2. Вашего XIb не правильно, у вас есть верхний UIView. Вам нужно удалить это.

Для фиксации первого вопроса, вам нужно сделать так:

__owner = [ProfileHeadingViewOwner new]; 
__owner.profileHeadingView = (ProfileHeadingView *)[[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:__owner options:nil] objectAtIndex:0]; 
__owner.profileHeadingView.delegateViewController = viewController; 

Для фиксации второго вопроса, изменить дизайн XIb от:

Current

к:

Correct

+0

Thanks Midhun MP. Это решило мою проблему, и я отметил это как правильный ответ. Просто из любопытства, если вы наблюдаете образец проекта от автора, дающего упомянутый учебник, он сделал именно то, что я сделал, но как-то это работает. Вот его примерный проект на Github, а «Развязанный» - это его способ внедрения XIB, который делает просмотр XIB автономным и многоразовым. https://github.com/eppz/iOS.Blog.UIView_from_Xib –

+0

@LocPham: Добро пожаловать. Я проверяю его проект. –

Смежные вопросы