来自其他控件的继承值

时间:2012-12-14 11:20:41

标签: iphone ios uitableview inheritance uipickerview

我是编程新手。我对继承有一个基本的疑问。我在UITableView中有一个ViewController,当我选择Tableview的第一行时。我带我去{ {1}}只有我必须从Picker中选择值的页面,我现在必须UIPickerViewNSLOG picker中选择ViewController这是我面临的小问题。

VIewController.m

button

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

2 个答案:

答案 0 :(得分:1)

您可以使用代理

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

@protocol pickerDelegate <NSObject>

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

@end

制作此协议的属性

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

和 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)行inComponent:(NSInteger)组件方法,执行此操作

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

答案 1 :(得分: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;