我正要爲我的iPhone項目添加UIScrollView
,並且在我實現此功能之前,我想檢查我的方法是否正確,或者如果我可以違反了我不知道的一些最佳做法。UIScrollView同時被UIViewController的'視圖'屬性和插座引用
我見過的教程通常涉及將UIScrollView
添加到現有的UIView
,他們從那裏工作。但是,我想知道是否可以完全替代UIView
,只需將UIScrollView
作爲我的筆尖文件中唯一的頂級對象添加即可。
我的示例項目使用Xcode的基於視圖的應用模板:
Project navigator http://img542.imageshack.us/img542/5364/projectnavigator.png
我從原來的MySampleViewController.xib
文件刪除UIView
頂級對象,並通過添加UIScrollView
對象代替它:
Nib placeholders http://img526.imageshack.us/img526/7709/placeholderobjects.png
現在我的筆尖文件只在畫布上顯示此對象:
Canvas http://img233.imageshack.us/img233/4063/scrollview.png
然後我創建了從0的view
插座到UIScrollView
的鏈接。現在
,如果我想以編程方式操縱的UIScrollView的內容,我可以使用此代碼:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *colors = [NSArray arrayWithObjects:[UIColor redColor], [UIColor greenColor], [UIColor blueColor], nil];
// Solution B: With the following line we avoid creating an extra outlet linking to the UIScrollView top-level object in the nib file
UIScrollView *scrollView = (UIScrollView *)self.view;
for (int i = 0; i < colors.count; i++) {
CGRect frame;
//frame.origin.x = self.scroller.frame.size.width * i; // Solution A: scroller is an IBOutlet UIScrollView *scroller;
frame.origin.x = scrollView.frame.size.width * i; // Solution B
frame.origin.y = 0;
//frame.size = self.scroller.frame.size; // Solution A
frame.size = scrollView.frame.size; // Solution B
UIView *subView = [[UIView alloc] initWithFrame:frame];
subView.backgroundColor = [colors objectAtIndex:i];
//[self.scroller addSubview:subView]; // Solution A
[self.view addSubview:subView]; // Solution B
[subView release];
}
//self.scroller.contentSize = CGSizeMake(self.scroller.frame.size.width * colors.count, self.scroller.frame.size.height); // Solution A
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * colors.count, scrollView.frame.size.height); // Solution B
}
爲了實現解決方案A滾輪出口必須連接到筆尖的UIScrollView的爲好,在連接檢查看起來像這樣:
Connections Inspector http://img228.imageshack.us/img228/8397/connectionsj.png
溶液A需要一個出口,這意味着公頃ving兩個連接UIScrollView
:UIViewController
自己的view
outlet和MySampleViewController
的scroller
outlet。是否合法和/或建議有兩個網點指向同一視圖?
溶液B只涉及UIViewController
的view
插座連接到視圖,並使用該行:
UIScrollView *scrollView = (UIScrollView *)self.view;
我的問題:
- 我是否招致某種違反了Apple使用這兩種解決方案之一的設計指南?
- 我應該堅持UIView解決方案中的UIScrollView嗎?
- 有沒有其他的方法來實現這個?
謝謝!
P.S.對不起,語法突出顯示,SO沒有認識到使用'objective-c'標籤
有什麼問題在視圖內部有滾動視圖。我認爲uiview的成本可以忽略不計 – ethyreal