1

私はプログラミングの初心者です.私は継承の基本的な疑いがあります.私は持っていて、最初の行を選択するとUITableView.これは私が直面している小さな問題です。ViewControllerTableviewPickerUIPickerViewNSLOGpickerViewControllerbutton

ビューコントローラー.m

- (void)viewDidLoad
 {
 [super viewDidLoad];

tableview =[[UITableView alloc]initWithFrame:CGRectMake(0,0,([UIScreen mainScreen].bounds.size.width),([UIScreen mainScreen].bounds.size.height/2)) style:UITableViewStyleGrouped];
tableview.delegate=self;
tableview.dataSource=self;
[self.view addSubview:tableview];




button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button addTarget:self action:@selector(pressed) forControlEvents:UIControlEventTouchDown];
[button setTitle:@"START " forState:UIControlStateNormal];
button.frame = CGRectMake(62, 250, 196, 37);
[self.view addSubview:button];



thearray= [[NSArray alloc]initWithObjects:@"A",@"B ",@"C",@"D",@"E" ,nil];



 [super viewDidUnload]; 
}

 -(void)pressed{
  // nslog value..i need here the picker value
   }

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}



 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{


return 5;
}



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{


if(indexPath.row==0){

 Picker1 *pick= [[Picker1 alloc] init];


    [self navigationController] pushViewController:pick animated:YES]      
}


 }




 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NS IndexPath *)indexPath  
{  
static NSString *CellIdentifier = @"Cell";  


 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
 if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
}


cell.textLabel.text=[thearray objectAtIndex:indexPath.row];

 return cell;
}

Picker.m

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {

return 1;

}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {

return [list count];

}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {

return [list objectAtIndex:row];

}


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

// update label text to show selected option

string=[NSString stringWithFormat:@"%@",[list objectAtIndex:row]];

label.text=string;


[self dismissModalViewControllerAnimated:YES];



 }


- (void)viewDidLoad
{
[super viewDidLoad];

list =[[NSMutableArray alloc]init];
[list addObject:@"A"];
[list addObject:@"B"];
    [list addObject:@"C"];



}
4

2 に答える 2

1

デリゲートを使用できます

picker.m の @interface セクションの上でこれを行います

@protocol pickerDelegate <NSObject>

-(void)didFinishPicking:(NSString *)pickedStr;

@end

このプロトコルのプロパティを作成します

@property(nonatomic,weak)id<pickerDelegate>delegate

そして - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component メソッドで、これを行います

string=[NSString stringWithFormat:@"%@",[list objectAtIndex:row]];



[self.delegate didFinsihPicking:string];

現在、viewcontroller.h のメソッドで

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath


 Picker1 *pick= [[Picker1 alloc] init];

[pick setDelegate : self];

viewcontroler.h に dlegate メソッドを実装します。

    -(void)didFinishPicking:(NSString *)pickedStr
{
[self setStr:pickedStr]
}

ここで、str は、viewcontroller.h で宣言し、ボタン クリック イベントでこの文字列を出力する必要がある文字列変数です。

于 2012-12-14T11:43:39.493 に答える
1

選択した値をテーブル ビューに戻すには、ピッカーのデリゲートが必要なようです。Picker.h ファイルの先頭でデリゲート メソッドを定義します。

@class Picker;

@protocol PickerDelegate <NSObject>

- (void)picker:(Picker *)thePicker didPickValue:(NSString *)theValue;

@end

また、 Picker.h ファイルで、テーブル ビュー コントローラーとなるデリゲートへの弱い接続を作成します。

@property (nonatomic, weak) id <PickerDelegate> delegate;

テーブル ビュー コントローラーで、デリゲートをヘッダー ファイルに追加します。

@interface ViewController : UITableViewController <PickerDelegate>

Picker.m からデリゲート メソッドを呼び出し、ViewController.m に実装します。

[self.delegate picker:self didPickValue:[NSString stringWithFormat:@"%@",[list objectAtIndex:row]]];

重要: ピッカーを作成するときは、誰が代理人になるかを指定する必要があります。テーブルビュー内でこれを行っているため、次を呼び出します。

pick.delegate = self;
于 2012-12-14T11:52:35.800 に答える