UIView按钮加载XIB不起作用

时间:2011-07-27 22:41:48

标签: iphone class uiview xib

我已经加载了一个带有单独的XIB(SecondView.xib)的UIView(FirstView.m),但该XIB中的按钮使应用程序崩溃。按钮的代码(IBOutlet& IBAction)位于SecondView.m。

我是否需要将SecondView.m中的代码指向FirstView.m?我尝试使用#import和@class ......但是没有成功。

我正在使用的代码完全有效......我很确定该问题与加载到UIView中的XIB有关...然后可能会失去与实现文件的连接。想法?

提前致谢!

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 个答案:

答案 0 :(得分:1)

首先FirstView(大概是SecondView)是UIViewController而不是UIView所以命名为“FirstViewController”会更加清晰。视图和视图控制器是非常不同的东西。

其次,您要在“[SecondViewPopUP addSubview:SecondV.view];”行中添加UIViewController的视图作为另一个视图的子视图。这不是UIViewControllers的预期使用方式,UIViewController programming guide建议不要使用它。

  

您创建的每个自定义视图控制器对象都负责管理单个视图层次结构中的所有视图。在iPhone应用程序中,视图层次结构中的视图传统上覆盖整个屏幕,但在iPad应用程序中,它们可能仅覆盖屏幕的一部分。视图控制器与其视图层次结构中的视图之间的一对一对应关系是关键设计考虑因素。您不应使用多个自定义视图控制器来管理同一视图层次结构的不同部分。同样,您不应使用单个自定义视图控制器对象来管理多个屏幕内容。

最后,如果您要发布应用崩溃时列出的错误,我们可能会发现您尝试将-shareOnFB:-shareOnTwitter:消息发送到“FirstView”实例,而该实例未实现它们因为您的nib绑定未正确配置,即您将nib的文件所有者设置为“SecondView”,然后使用“FirstView”实例作为其所有者加载它。没有更多数据,无法肯定地说。