この質問には、C4 オブジェクトを使用して行う方法と、Interface Builder / UIControls を使用して行う方法の 2 つの回答があります。後で C4 の方法を比較できるように、最初に UI の両方の方法を示します。
UI コントロール
UIControls でこれを行うC4WorkSpace.h
には、まず次のメソッドとプロパティを持つようにヘッダーを設定します。
@property (assign, nonatomic) IBOutlet UILabel *myLabel;
@property (assign, nonatomic) IBOutlet UISlider *mySlider;
@property (assign, nonatomic) IBOutlet UIStepper *myStepper;
-(IBAction)sliderWasUpdated:(UISlider *)slider;
-(IBAction)stepperWasUpdated:(UIStepper *)stepper;
次に、3 つのコンポーネントすべてをプロジェクトの XIB ファイル (つまり、UISlider、UILabel、および UIStepper) にドラッグします。sliderWasUpdated:
オプションを使用してアクションをスライダーにリンクし、valueChanged
オプションを使用してstepperWasUpdated:
アクションをステッパーにリンクしvalueChanged
ます。この手順を実行する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
両方の UI オブジェクトの最小値/最大値が同じであることを確認します (これにより、それらを一致させることができます)。
このstepperWasChanged:
メソッドでは、次の 2 つのことを行います。
- ステッパーの値を使用して、ラベルのテキストを設定します
- また、ステッパーの値を使用してスライダーの値を設定します!
このsliderWasChanged:
メソッドでは、ステッパーを更新して同じことを行いますが、スライダーの値も丸め、段階的に増加するようにします (物事を整理するためだけです)。
C4コントロール
ネイティブ UI オブジェクトの代わりに C4 オブジェクトで同じことを行うには、少し異なる設定を行います。まず、 には何も追加せず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を使用していることを除いて、これのほとんどは同じであることに注意してください。また、 Interface Builder を使用していないため、-(void)
代わりにメソッドを呼び出します。-(IBAction)
次に、次のコードを に追加します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
違い
2 つのアプローチの主な違いは、Interface Builder を使用するかどうかです。C4 アプローチではcreateAddObjects
、スライダー、ラベル、ステッパーがすべてキャンバスに追加されるように、プロジェクトに呼び出されるメソッドを追加する必要があります。
このメソッドには、C4UIElements のアクションをコードにバインドするためのメソッドも含まれています。これは次の行で行われます。
[self.mySlider runMethod:@"sliderWasUpdated:"
target:self
forEvent:VALUECHANGED];
[self.myStepper runMethod:@"stepperWasUpdated:"
target:self
forEvent:VALUECHANGED];
これらが設定されると、次のような UI オブジェクトの代わりに C4 オブジェクトの使用を指定することだけが異なります。
-(void)sliderWasUpdated:(C4Slider *)slider {...}
それ以外の
-(IBAction)sliderWasUpdated:(UISlider *)slider {...}