經過很長一段時間,我終於開始使用Objective-C了,到目前爲止我只有完整的應用程序。目標是最終重構ARC和可能的故事板,但目前我正在拋光iOS 4.x目標。我很生鏽,所以如果這是一個愚蠢的問題,請和我聯繫。幾個IBOutlets指向零
我在我的主視圖中有一個按鈕,觸發showAction方法。該方法如下:
- (void)showAbout
{
AboutViewController *aboutView = [[[AboutViewController alloc] init] autorelease];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
aboutView.modalPresentationStyle = UIModalPresentationFormSheet;
}
else
{
aboutView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
}
[self presentModalViewController:aboutView animated:YES];
}
的AboutViewController類有這樣的.h:
@interface AboutViewController : UIViewController <UIActionSheetDelegate, MFMailComposeViewControllerDelegate> {
}
- (IBAction)dismiss:(UIButton *)sender;
- (IBAction)feedback:(UIButton *)sender;
@property (retain) IBOutlet UIButton *dismissButton;
@property (retain) IBOutlet UIButton *feedbackButton;
@property (retain) IBOutlet UIImageView *background;
@property (retain) IBOutlet UITextView *textView;
@end
,一切都已經在文件的.xib(同一個用於iPhone和iPad)正確連接。這些操作按預期觸發,並且網點可以訪問,但只能在iPhone上使用。在iPad上運行時,只有textView被正確初始化,其餘所有指向nil。
在.M我已經試過這樣:
@implementation AboutViewController
@synthesize dismissButton = _dismissButton;
@synthesize feedbackButton = _feedbackButton;
@synthesize background = _background;
@synthesize textView = _textView;
// ...
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"obj self.dismiss: %@", self.dismissButton);
NSLog(@"frame dismiss: %@", NSStringFromCGRect(self.dismissButton.frame));
}
在iPhone上我得到這樣的:
2012-02-08 22:51:00.341 myapp[17290:207] obj self.dismiss: <UIButton: 0x70281d0; frame = (180 410; 120 30); opaque = NO; autoresize = LM+W+RM+TM; layer = <CALayer: 0x7028260>>
2012-02-08 22:51:00.342 myapp[17290:207] frame dismiss: {{180, 410}, {120, 30}}
在iPad上,相反,我得到這個:
2012-02-08 22:51:40.428 myapp[17320:207] obj self.dismiss: (null)
2012-02-08 22:51:40.428 myapp[17320:207] frame dismiss: {{0, 0}, {0, 0}}
有沒有其他的事情發生,這取決於用戶界面的成語,我對此非常困惑。就好像在iPad上,除了textView之外的任何插口都沒有設置,即使它們在.xib文件中正確鏈接了。在viewWillAppear中,self.textView 是也可以在iPad上按預期工作。我也嘗試在viewDidLoad中做這件事,如果我沒有弄錯,應該在viewWillAppear之前調用它,甚至在dismiss:方法中,但它們永遠不可用。
我需要訪問按鈕的框架的原因是關於視圖相對複雜,無法自動重新定位其子視圖。我需要做的唯一事情就是讓按鈕在iPad上更大的模式視圖上更寬。
任何提示將不勝感激!
在此先感謝。
您是否在使用不同的.xib for iPad?還是有可能你認爲你不是,但是你設置混合應用程序項目的方式意味着它爲iPad創建了一個單獨的.xib,而你沒有意識到? – 2012-02-08 22:59:44
不,我只爲另一個MainWindow類創建了不同的iPad .xib,其他所有(包括這個)共享相同的.xib。這個項目最初只是iPhone,所以我手動創建了這個項目,並區分了App Delegate中的工作流程,以根據需要設置根視圖控制器(它是iPad上的分割視圖控制器,iPhone上的導航控制器)。 – Jollino 2012-02-09 00:09:21
您是否試過從產品菜單做一個乾淨的生成?這只是相同的筆尖綁定不同,取決於它是iPad還是iPhone似乎不太可能,所以我懷疑問題在於別處。 – 2012-02-09 00:31:26