這個問題有2個答案,如何使用C4對象以及如何使用Interface Builder/UIControls來完成。我會先以兩種方式展示UI,以便我可以在之後比較C4方式。
UIControl
要與首次設置C4WorkSpace.h
頭,這樣UIControls做到這一點,有以下方法和屬性:
然後,在你將所有三個組成部分到您的項目XIB文件(即UISlider,UILabel和UIStepper)。使用valueChanged
選項將動作sliderWasUpdated:
鏈接到滑塊,並使用valueChanged
選項將stepperWasUpdated:
動作鏈接到步進器。您可以通過從項目中選擇C4Canvas.xib
然後右鍵單擊黃色立方體,然後從彈出式菜單中列出的操作拖到您最近放置在畫布上的每個對象來執行此步驟。
接下來,將下面的代碼添加到您的C4WorkSpace.m
文件:
@implementation C4WorkSpace
-(void)setup {
self.myStepper.minimumValue = 0.0f;
self.myStepper.maximumValue = 10.0f;
self.mySlider.minimumValue = 0.0f;
self.mySlider.maximumValue = 10.0f;
}
-(IBAction)sliderWasUpdated:(UISlider *)slider {
slider.value = [C4Math round:slider.value];
self.myLabel.text = [NSString stringWithFormat:@"%4.2f",slider.value];
self.myStepper.value = slider.value;
[self.myLabel sizeToFit];
}
-(IBAction)stepperWasUpdated:(UIStepper *)stepper {
self.myLabel.text = [NSString stringWithFormat:@"%4.2f",stepper.value];
self.mySlider.value = stepper.value;
[self.myLabel sizeToFit];
}
@end
在setup
,我們要確保這兩個用戶界面對象的最小/最大值是相同的(這樣我們就可以讓他們匹配了)。
在stepperWasChanged:
方法中,我們做兩件事情:
- 我們使用步進的值來設置標籤的文本
- 我們還使用步進的值來設置滑塊的值!
在sliderWasChanged:
方法,我們做同樣的事情,更新步進,但我們也有圓形滑塊的值,以便它在步驟的增加(只是爲了保持整潔)。
C4Control
做C4的對象相同,而不是原生UI的對象,我們設置的東西,有點不同。首先,我們不添加任何東西到我們的C4Canvas.xib
,而是我們將手動設置對象。
在你C4WorkSpace.h
文件,添加以下代碼行:
@property (readwrite, nonatomic, strong) C4Label *myLabel;
@property (readwrite, nonatomic, strong) C4Slider *mySlider;
@property (readwrite, nonatomic, strong) C4Stepper *myStepper;
-(void)sliderWasUpdated:(C4Slider *)slider;
-(void)stepperWasUpdated:(C4Stepper *)stepper;
注意,大部分是相同的,除了我們正在使用的,而不是UI前綴C4。此外,我們調用我們的方法-(void)
而不是-(IBAction)
,因爲我們沒有使用Interface Builder。
接下來,將下面的代碼添加到您的C4WorkSpace.m
:
@implementation C4WorkSpace
-(void)setup {
[self createAddObjects];
//calibrate the min/max values
self.myStepper.minimumValue = 0.0f;
self.myStepper.maximumValue = 10.0f;
self.mySlider.minimumValue = 0.0f;
self.mySlider.maximumValue = 10.0f;
}
-(void)sliderWasUpdated:(C4Slider *)slider {
slider.value = [C4Math round:slider.value];
self.myLabel.text = [NSString stringWithFormat:@"%4.2f",slider.value];
self.myStepper.value = slider.value;
[self.myLabel sizeToFit];
}
-(void)stepperWasUpdated:(C4Stepper *)stepper {
self.myLabel.text = [NSString stringWithFormat:@"%4.2f",stepper.value];
self.mySlider.value = stepper.value;
[self.myLabel sizeToFit];
}
-(void)createAddObjects {
//set up the objects
self.myLabel = [C4Label labelWithText:@"values"];
self.myStepper = [C4Stepper stepper];
self.mySlider = [C4Slider slider:CGRectMake(0, 0, 192, 44)];
//position them
CGPoint centerPoint = CGPointMake(self.canvas.center.x,
self.canvas.center.y - 100);
self.myStepper.center = centerPoint;
centerPoint.y += 100;
self.myLabel.center = self.canvas.center;
centerPoint.y += 100;
self.mySlider.center = centerPoint;
//set up action bindings
[self.mySlider runMethod:@"sliderWasUpdated:"
target:self
forEvent:VALUECHANGED];
[self.myStepper runMethod:@"stepperWasUpdated:"
target:self
forEvent:VALUECHANGED];
[self.canvas addObjects:@[self.myStepper,self.myLabel,self.mySlider]];
}
@end
差異
兩種方法之間的主要區別在於你是否使用Interface Builder。在C4方法中,我們需要在我們的項目中添加一個名爲createAddObjects
的方法,以便我們的滑塊,標籤和步進器都被添加到畫布中。
此方法還包含了我們C4UIElements的行動結合我們的代碼,這恰好在線路中的方法:一旦這些建立僅差
[self.mySlider runMethod:@"sliderWasUpdated:"
target:self
forEvent:VALUECHANGED];
[self.myStepper runMethod:@"stepperWasUpdated:"
target:self
forEvent:VALUECHANGED];
被指定使用C4的對象,而不是UI對象,如:
-(void)sliderWasUpdated:(C4Slider *)slider {...}
,而不是
-(IBAction)sliderWasUpdated:(UISlider *)slider {...}
P.S.下面是C4方法代碼的要點鏈接:https://gist.github.com/C4Code/5614798 –
乾杯特拉維斯! –
我想我很喜歡UI Builder,因爲在我的工作中,我設計了基於圖形拖放界面的觸摸屏,這些界面通常通過寄存器的地址鏈接到控制器(PLC)控制器。通常我只編寫代碼來編寫非常複雜的操作,這些操作在用戶界面中沒有處理,即:解析文本文件並提取特定數據片段,或者更改屏幕上元素的工作方式。如果你谷歌的產品如「Wonderware」或「RSView」,你會看到我在說什麼。 –