从其他控件继承的值



我是编程新手。我对继承有一个基本的怀疑。我在ViewController有一个UITableView,当我选择第一行Tableview时.它将我带到Picker页面,其中只有我必须从UIPickerView中选择值,现在很好,我必须在buttonViewControllerNSLOG选定的picker值,这是我面临的小问题。

VIewController.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;
}

皮克·

- (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"];

}

您可以使用委托

在 picker.m 中,上面的@interface部分执行此操作

@protocol pickerDelegate <NSObject>

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

@end

使此协议的属性

@property(nonatomic,weak)id<pickerDelegate>delegate
和 in - (void)pickerView:(

UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component method, do this

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 中声明的字符串变量,并在按钮单击事件时打印此字符串

听起来您的

选取器需要一个委托才能将所选值传递回表视图。在 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;

最新更新