XIB无法加载...只显示黑屏

时间:2012-04-25 13:21:33

标签: iphone ios xib

我正在iOS 4.2及更高版本中创建通用应用程序。

我有一个名为DataInputViewController_iPhone.xib的笔尖。在第一个出现的视图控制器上,我有一个按钮,它应该启动类DataInputViewController。它做到了,但它没有显示XIB文件的内容。它只是显示黑屏。

为什么会发生这种情况?

我有这个代码调用新的视图控制器:

-(IBAction)clickedButton:(id)sender {
    if((UIButton *)sender == (UIButton *)startButton){
        NSString *nibName;
        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
            nibName = @"DataInputViewController_iPhone";
        } else {
            nibName = @"DataInputViewController_iPad";
        }

        DataInputViewController *nextVC = [[DataInputViewController alloc] initWithNibName:nibName bundle:nil];
        [self.navigationController pushViewController:nextVC animated:YES];
    }
    else if((UIButton *)sender == (UIButton *)otherButton){
        NSLog(@"clicked the other button");
    }
}

此方法和新视图控制器的init方法中的NSLogging告诉我nibNameOrNil变量已正确拉出。

这是({1}}中的(标准)init方法:

DataInputViewController.m

为什么会发生这种情况?或者如何解决?

谢谢:)

9 个答案:

答案 0 :(得分:2)

您不必手动设置笔尖名称。只需将其命名为DataInputViewController~iphone.xibDataInputViewController~ipad.xib,然后拨打[[DataInputViewController alloc] init]

有关详细信息,请参阅iOS Supports Device-Specific Resources

答案 1 :(得分:1)

我找到修复此问题的唯一方法是删除nib和类,然后重新创建它们。不是特别优雅,但它有效...

答案 2 :(得分:1)

我遇到了同样的问题。只需清理项目,关闭XCode,重新启动Mac并再次打开项目。 不要忘记以前在模拟器或设备上删除应用程序。

答案 3 :(得分:1)

我有同样的问题,我需要为实用程序视图控制器加载iPad或iPhone .xib文件。它是一个表单,因此它有很多UILabel和UITextField元素作为IBOutlets链接。我将构建整个布局,链接所有元素,并且它工作正常,直到我构建并运行它。我甚至接受了在这个帖子上发布的建议并重新创建了.xib和类文件(大量链接IBOutlets)但没有成功。

问题是这样的。在该类的实现中,根视图不能被@synthesized。一旦我合成了基本视图,一切都变黑了。只需删除“@synthesize视图”;线条,一切都像一个魅力。当我呈现我的视图控制器时,一切都在那里。

以下是包含所有IBOutlet的类的头文件:

    #import <UIKit/UIKit.h>

@interface SignUpFormViewController : UIViewController <UITextFieldDelegate, NSXMLParserDelegate>

@property (strong, nonatomic) IBOutlet UIView *rootView;
@property (weak, nonatomic) IBOutlet UILabel *signUpFormLabel;
@property (weak, nonatomic) IBOutlet UIButton *infoButton;
@property (weak, nonatomic) IBOutlet UILabel *enterEmailLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterEmailTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterPasswordLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterPasswordTextField;
@property (weak, nonatomic) IBOutlet UILabel *reEnterPasswordLabel;
@property (weak, nonatomic) IBOutlet UITextField *reEnterPasswordTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterFirstNameLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterFirstNameTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterLastNameLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterLastNameTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterPhoneNumberLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterPhoneNumberTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterStreetAddressLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterStreetAddressTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterStreetAddress2Label;
@property (weak, nonatomic) IBOutlet UITextField *enterStreetAddress2TextField;
@property (weak, nonatomic) IBOutlet UILabel *enterCityLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterCityTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterStateLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterStateTextField;
@property (weak, nonatomic) IBOutlet UILabel *enterZipLabel;
@property (weak, nonatomic) IBOutlet UITextField *enterZipTextField;
@property (weak, nonatomic) IBOutlet UIButton *backButton;
@property (weak, nonatomic) IBOutlet UIButton *signUpNowButton;

- (IBAction)infoButtonPressed:(id)sender;
- (IBAction)backButtonPressed:(id)sender;
- (IBAction)signUpNowButtonPressed:(id)sender;

@end

以下是合成根视图的实现文件:

#import "SignUpFormViewController.h"

@implementation SignUpFormViewController
@synthesize rootView,signUpFormLabel,infoButton,enterEmailLabel,enterEmailTextField,enterPasswordLabel,enterPasswordTextField,reEnterPasswordLabel,reEnterPasswordTextField,enterFirstNameLabel,enterFirstNameTextField,enterLastNameLabel,enterLastNameTextField,enterPhoneNumberLabel,enterPhoneNumberTextField,enterStreetAddressLabel,enterStreetAddressTextField,enterStreetAddress2Label,enterStreetAddress2TextField,enterCityLabel,enterCityTextField,enterStateLabel,enterStateTextField,enterZipLabel,enterZipTextField,backButton,signUpNowButton,btnDone,btnPrev,btnNext,inputAccView,activeTextField,currentString;

只需从正在合成的属性列表中删除“rootView”,这应该可以解决问题。比删除iPad和iPhone布局的.xib文件并重新创建它们要容易得多。

仅供参考我正在使用xCode 4.6.3和目标SDK = 6.1

我希望这可以帮助其他人遇到这个耗时且非常令人沮丧的问题。

答案 4 :(得分:0)

这可以帮助您:在模拟器或设备上删除您的应用并再次运行。我发现如果我过多地使用笔尖,尤其是名称或本地化,它似乎一切正常(我没有错误),但Xcode实际上忽略了这些变化。

执行清理(产品 - >清除),从模拟器或设备中删除,再次运行。

答案 5 :(得分:0)

您必须确保在DataInputViewController.m中实现loadView方法,并在方法内添加行[super loadView],如下所示:


- (void)loadView {
    [super loadView];
}

答案 6 :(得分:0)

我发现不将文件所有者的插座拖到自定义子类UITableViewCell.h或.m文件中也会导致黑度。确保将插座拖到与UITableViewCell子类关联的两个文件之一。

答案 7 :(得分:0)

就我而言, 我收到了同事的xib文件。 装好的xib但没有显示。 因为隐藏的复选框被选中了所以我每天都花了我一个

选中xib中的隐藏复选框。

答案 8 :(得分:0)

简单修复!! 导航到版本编辑器并返回标准编辑器为我解决了问题