我試圖做一些不同的事情,混合XIB和STORYBOARD。我的主要目標是爲我的應用程序創建一個複雜的STORYBOARD,並使用XIB查看比iPhone更大的視圖,例如iPhone上的Settings應用程序。如何在同一個ViewController(在故事板上創建)之間切換兩個視圖(在xib上創建)?
作爲一個簡單的例子,我使用xib接口創建了兩個類視圖view1和view2。每個人都會執行簡單的任務,比如顯示許多標籤「Hello World - View 1」和「Hello World - View 2」,直到覆蓋正常iPhone屏幕的兩倍。爲此,將XIB上的視圖設置爲「FreeForm」的大小,並在視圖中放置了6個標籤。 h和.M被寫成文件:它,我創建了一個視圖控制器後
View.h
#import <UIKit/UIKit.h>
@interface View1 : UIView {
UIView *view;
UILabel *lab1;
UILabel *lab2;
UILabel *lab3;
UILabel *lab4;
UILabel *lab5;
UILabel *lab6;
}
@property (nonatomic, retain) IBOutlet UIView *view;
@property (retain, nonatomic) IBOutlet UILabel *lab1;
@property (retain, nonatomic) IBOutlet UILabel *lab2;
@property (retain, nonatomic) IBOutlet UILabel *lab3;
@property (retain, nonatomic) IBOutlet UILabel *lab4;
@property (retain, nonatomic) IBOutlet UILabel *lab5;
@property (retain, nonatomic) IBOutlet UILabel *lab6;
@end
View.m
#import "View1.h"
@implementation View1
@synthesize view, lab1, lab2, lab3, lab4, lab5, lab6;
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[[NSBundle mainBundle] loadNibNamed:@"View1" owner:self options:nil];
[self addSubview:self.view];
}
return self;
}
- (void) awakeFromNib
{
[super awakeFromNib];
[self addSubview:self.view];
}
@end
稱爲myViewController用故事板,並把視圖內的滾動視圖。 .H和.M可以看到下面的代碼:
ViewController.h
#import <UIKit/UIKit.h>
@class View1, View2;
@interface ViewController : UIViewController {
View1 *viewXIB1;
View2 *viewXIB2;
}
@property (weak, nonatomic) IBOutlet UIScrollView *myScrollView;
- (IBAction)changeView1:(id)sender;
- (IBAction)changeView2:(id)sender;
@end
ViewController.m
#import "ViewController.h"
#import "View1.h"
#import "View2.h"
@interface ViewController()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.myScrollView.contentSize=CGSizeMake(320,755);
viewXIB1 = [[View1 alloc] initWithFrame:CGRectMake(0, 0, 320, 755)];
viewXIB2 = [[View2 alloc] initWithFrame:CGRectMake(0, 0, 320, 755)];
[self.myScrollView addSubview:viewXIB1];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
- (IBAction)changeView1:(id)sender {
[self.myScrollView addSubview:viewXIB1];
[self.myScrollView setNeedsLayout];
[self.view reloadInputViews];
[self reloadInputViews];
}
- (IBAction)changeView2:(id)sender {
[self.myScrollView addSubview:viewXIB2];
[self.myScrollView setNeedsLayout];
}
@end
的問題是,有對代碼沒有任何警告或錯誤,但不起作用。 這段代碼有什麼問題?有人能幫我嗎?
觀察到@ssantos,但該應用程序仍然無法正常工作。按鈕也接收Touch和滾動視圖,但滾動視圖內沒有任何內容。奇怪的是,作爲標籤的View1和View2(lab1,lab2 ... lab6)上創建的即時變量看起來不會加載XIB上的內容,因爲當我嘗試使用命令行查看其內容時:「( lldb)po lab1「返回爲」$ 0 = 0x00000000「。也許還有一些問題。 –
2013-04-12 13:08:00
很難說正在發生什麼,但進一步查看你的代碼,這條線沒有任何意義'[self.view addSubview:self.view];'。我會編輯我的回答 – ssantos 2013-04-12 15:38:13
很棒的@ssantos。這是我發現的兩個問題之一,正確的代碼是[self addSubview:self.view]。第二個問題是我忘記爲我的文件所有者設置自定義類的「類」。現在我的應用程序工作得很好!非常感謝,解決了我的問題。 – 2013-04-12 15:55:08