0

私がやろうとしていること:

私は持っていViewControllerます:

@implementation ViewController
@synthesize myPicker;
@synthesize myPickerHelper;
@synthesize label;

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    myPickerHelper = [[UIPickerViewHelper alloc]initWithUIPickerView:myPicker   andNumberOfComponents:4];

    [myPickerHelper.valuesForComponent1 addObject:@"TEST1"];
    [myPickerHelper.valuesForComponent1 addObject:@"TEST2"];
    ;

    [weightsPicker reloadAllComponents];
    [weightsPicker selectRow:0 inComponent:0 animated:YES];
    //TODO receive message from picker helper.
  //label.text = ... set a listner (like that one in java) or what else
    }

}

そして、私にはPickerViewHelper: (デリゲートとデータソースの問題を処理する) があります。

@interface UIPickerViewHelper : NSObject <UIPickerViewDelegate, UIPickerViewDataSource, OnPickerViewChangeDelegate>

@implementation UIPickerViewHelper 
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
  //TODO send message to controller view.
}

そしてプロトコル:

@protocol OnPickerViewChangeDelegate
@optional
-(void)onChange:(NSString*)result;
@end

私が望むのは、UiPickerViewHelperクラスでプロトコルメソッド「onChange」を使用して、(ViewController 内の) ラベルに通知されるようにすることです。Javaでそれを解決する方法は知っていますが、目的cでそれを解決する方法がわかりません。

よろしく

4

2 に答える 2

1

UIPickerViewHelper.h

@property (nonatomic, assign) id <OnPickerViewChangeDelegate> delegate

UIPickerViewHelper.m

@synthesize delegate;

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    //TODO send message to controller view.
    [self.delegate onChange:[NSString stringWithFormat:@"Selected row %d", row]];
}

ViewController.m

- (void)viewDidLoad
{
    [super viewDidLoad];
    myPickerHelper = [[UIPickerViewHelper alloc]initWithUIPickerView:myPicker   andNumberOfComponents:4];
    myPickerHelper.delegate = self;

    ...
}

-(void)onChange:(NSString*)result {

    NSLog(@"Here is the result: %@", result);
    label.text = result;
}
于 2013-02-25T14:26:59.657 に答える
0

UIPickerview変更のためのデリゲート メソッドはありません。任意の位置で停止するので、

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

メソッドが呼び出されるため、ピッカーがアニメーション/ローリングを停止する前にユーザーが終了した場合... を非表示にするメソッドは、UIPickerViewローリング/アニメーション中に最後に選択された値の uipicker を呼び出す必要があります。

 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
    if(delegate respondsToSelector:@selector(onChange:)){
        [delegate onChange:row];//return the index of row selected
     }
    }
于 2013-02-25T14:36:27.763 に答える