2011-07-27 19 views
0

我已經加載了帶有單獨的XIB(SecondView.xib)的UIView(FirstView.m),但該XIB中的按鈕會使應用程序崩潰。這些按鈕的代碼(IBOutlet & IBAction)位於SecondView.m中。UIView加載XIB的按鈕不起作用

我是否需要將SecondView.m中的代碼指向FirstView.m?我嘗試使用#import和@class ...但不成功。

我使用的代碼是完全有效的......我敢肯定,這個問題與XIB被加載到UIView中有關......然後可能失去與實現文件的連接。思考?

在此先感謝!

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");  
    } 
+0

請張貼一些代碼。 – David

+0

新增...大部分都是僞造的......我不想複製我所有的代碼......但它是重要的東西。 –

+0

嘗試NSLogging按鈕的插座,確保它不是無 – MCannon

回答

1

首先FirstView(推測是SecondView)是UIViewController而不是UIView,所以命名爲「FirstViewController」會更清晰。視圖和視圖控制器是非常不同的東西。

其次,你添加一個UIViewController的視圖作爲另一個視圖的子視圖的行「[SecondViewPopUP addSubview:SecondV.view];」這不是UIViewControllers預期會被使用的原因,UIViewController programming guide建議不要這麼做。

您創建的每個自定義視圖控制器對象都負責管理單個視圖層次結構中的所有視圖。在iPhone應用程序中,視圖層次結構中的視圖傳統上覆蓋整個屏幕,但在iPad應用程序中,它們可能只覆蓋屏幕的一部分。視圖控制器與其視圖層次結構中的視圖之間的一一對應是關鍵設計考慮因素。您不應該使用多個自定義視圖控制器來管理相同視圖層次結構的不同部分。同樣,您不應該使用單個自定義視圖控制器對象來管理多個屏幕內容。

最後,如果你要發佈,當你的應用程序崩潰,我們可能會看到你嘗試發送-shareOnFB:-shareOnTwitter:消息的「的firstView」不實現它們,因爲你的筆尖綁定實例的錯誤中列出沒有正確配置,即您將筆尖的文件所有者設置爲「SecondView」,然後將其作爲其所有者加載「FirstView」實例。不可能說沒有更多的數據。

+0

謝謝喬納......你對視圖控制器是正確的。這是我的問題:你會如何推薦我保持良好的使用?一旦點擊一個按鈕,我想要一個彈出窗口(不覆蓋整個屏幕)。填充它的最佳方式是什麼? –

+0

另外,崩潰後,我的控制檯讀取「sharedlibrary apply-load-rules all Current language:auto; currently objective-c(gdb)」...它也與「線程1:程序接收信號:'EXC_BAD_ACCESS'崩潰。 「 –

+0

你可以有一個視圖,它沒有它自己的UIViewController實例來管理它。只需創建一個視圖(如果方便的話,使用UINib從一個筆尖加載它)並將其添加爲子視圖。如果您具有特定於該視圖的控制器級邏輯,則爲其創建一個控制器類,但該控制器可以從NSObject繼承,而不是從UIViewController繼承。請參閱UIViewController編程指南的鏈接部分中的「注意:」。 – Jonah