Кнопки UIView, загруженные с XIB, не работают - PullRequest
0 голосов
/ 28 июля 2011

Я загрузил UIView (FirstView.m) с отдельным XIB (SecondView.xib), но кнопки в этом XIB вызывают сбой приложения. Код для кнопок (IBOutlet и IBAction) находится в SecondView.m.

Нужно ли указывать код от SecondView.m до FirstView.m? Я пытался использовать #import и @class ... но безуспешно.

Код, который я использую, полностью действителен ... Я почти уверен, что проблема как-то связана с загрузкой XIB в UIView ... и, возможно, с потерей соединения с файлом реализации. Мысли? * * 1005

Заранее спасибо!

FirstView.h

#import <UIKit/UIKit.h>
@interface FirstView : UIViewController {
    IBOutlet UIView *SecondViewPopUP;
    IBOutlet UIButton *openBTN;
    }

@property (nonatomic, retain) UIView *SecondViewPopUP;
@property (nonatomic, retain) IBOutlet UIButton *openBTN;
-(IBAction)showPopUp:(id)sender;

FirstView.m

@synthesize SecondViewPopUP;
@synthesize openBTN

- (void)viewDidLoad {
    SecondViewPopUP.alpha = 0;

    // Add IncidentsViewController to view
    SecondView *SecondV=[[SecondView alloc] init];
    SecondV.view.frame = CGRectMake(0, 0, 262, 269);
    SecondV.view.clipsToBounds = YES;
    [SecondViewPopUP addSubview:SecondV.view];
    SecondViewPopUP.frame = CGRectMake(0, 76, 262, 269);
    [SecondV release];
    }

-(IBAction)showPopUp:(id)sender {
    NSLog(@"Stats Button was pressed");

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.4];

    SecondViewPopUP.alpha = 1;

    [UIView commitAnimations];
    }

SecondView.h

#import <UIKit/UIKit.h>

@interface ShareViewController : UIViewController {
    IBOutlet UIButton *share_facebook;
    IBOutlet UIButton *share_twitter;
    }

@property (nonatomic, retain) IBOutlet UIButton *share_facebook;
@property (nonatomic, retain) IBOutlet UIButton *share_twitter;

-(IBAction)shareOnFB:(id)sender;
-(IBAction)shareOnTwitter:(id)sender;

SecondView.m

@synthesize share_twitter, share_facebook;
- (void)viewDidLoad {
    [super viewDidLoad];
    }

-(IBAction)shareOnFB:(id)sender {
    NSLog(@"Shared on FB");
    }

-(IBAction)shareOnTwitter:(id)sender {
    NSLog(@"Shared on Twitter");    
    }

1 Ответ

1 голос
/ 28 июля 2011

Прежде всего FirstView (и, предположительно, SecondView) - это UIViewController, а не UIView, поэтому назвать его «FirstViewController» было бы гораздо понятнее.Представления и контроллеры представлений - это очень разные вещи.

Во-вторых, вы добавляете представление UIViewController как подпредставление другого представления в строке "[SecondViewPopUP addSubview: SecondV.view];"Это не то, как предполагается использовать UIViewControllers, и руководство по программированию UIViewController не рекомендует по уважительной причине.

Каждый созданный вами объект контроллера представления отвечает за управление всемипредставления в единой иерархии представлений.В приложениях для iPhone представления в иерархии представлений традиционно покрывают весь экран, но в приложениях для iPad они могут покрывать только часть экрана.Однозначное соответствие между контроллером представления и представлениями в его иерархии представлений является ключевым соображением при проектировании.Не следует использовать несколько пользовательских контроллеров представления для управления различными частями одной и той же иерархии представления.Точно так же вы не должны использовать один объект контроллера настраиваемого представления для управления стоимостью нескольких экранов.

Наконец, если вы опубликуете ошибку, указанную при сбое приложения, мы, вероятно, увидим, что вы пытаетесьотправлять сообщения -shareOnFB: или -shareOnTwitter: экземпляру «FirstView», который их не реализует, поскольку привязки пера не настроены должным образом, т. е. вы задаете для «Владелец файла» пера «Второй вид», а затем загружаете его с помощьюэкземпляр "FirstView" в качестве его владельца.Точно сказать невозможно без дополнительных данных.

...