gpt4 book ai didi

ios - 从另一个 ViewController 为 UIPickerView 重新加载数据

转载 作者:行者123 更新时间:2023-11-29 10:37:02 26 4
gpt4 key购买 nike

我的问题是关于从另一个 ViewController 向我的 UIPickerView 设置新数据。我有 main.storyboard(ViewController.h 和 ViewController.m),我有一个 pickerview(我称之为 aPicker)。我有一个 CustomTableViewController 来加载一些图像。当我点击这些图片时,aPicker 的数据会发生变化。

ViewController.m 中的选择器

- (NSInteger)numberOfComponentsInPickerView: (UIPickerView *)pickerView;{
return 1;
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
if(pickerView== aPicker)
{
//I will code it later
}
}

-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;{
if(pickerView==aPicker)
{
return [aPickerAdapter count];
}
}

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{

UIView* tmpView= [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 32)];
UILabel *lbl;

if(pickerView==aPicker)
{
lbl = [[UILabel alloc] initWithFrame:CGRectMake(64, 0, 256, 32)];
[lbl setText:[aPickerAdapter objectAtIndex:row]];
}
[tmpView insertSubview:lbl atIndex:0];

return tmpView;
}

我在这里调用自定义表:

NSMutableArray* tranferData= [[NSMutableArray alloc] init];

[tranferData addObject:aPickerAdapter];
[tranferData addObject:aPicker];
[tranferData addObject:self];
aPicker.delegate=self;
[tranferData addObject:aPicker.delegate];
aPicker.dataSource=self;
[tranferData addObject:aPicker.dataSource];



customTableViewController=[[CustomTableViewController alloc] initWithNibName:@"CustomTableViewController" bundle:[NSBundle mainBundle] set:tranferData];
customTableViewController.delegate=self;

[self.view addSubview:customTableViewController.view];

在CustomTableViewController.m中接收

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil set:(NSMutableArray *)myarray{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
myArray=myarray;
// Custom initialization on passed parameter observation object
aPickerAdapter=[myarray objectAtIndex:0];
aPicker=[myarray objectAtIndex:1];
tranferSeft=[myarray objectAtIndex:2];
pickerDelegate=[myarray objectAtIndex:3];
pickerDataSource=[myarray objectAtIndex:4];
}
return self;
}

当点击表格中的图片时

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *string= [@"tap to row " stringByAppendingString:[NSString stringWithFormat:@"%d",indexPath.row]];
NSLog(string);

//NSString *str= [onlineIdList objectAtIndex:indexPath.row];
//UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Demo" message:str delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];

//[alert show];

NSMutableArray *testArr= [[NSMutableArray alloc]init];
[testArr addObject:@"2"];
[testArr addObject:@"4"];
[testArr addObject:@"6"];

//aPicker.delegate= pickerDelegate;
//aPicker.dataSource= pickerDataSource;

**aPickerAdapter=testArr;
[aPicker reloadAllComponents];**

[self hideAndShowSubChannel];//this funtion is to hide and show aPicker, defaut aPicker is hide, on first tap it will show([aPicker setHidden:NO]), and it hide on second tap....
}

当我点击图像时,选择器只隐藏和显示(我认为这意味着我的程序可以理解指向 aPicker 的指针),但它不能将我的 testArr 中的数据添加到 aPicker,我也尝试重置委托(delegate)和收到数据源,直到不起作用。我在 ViewController.m 中使用相同的代码(创建 testArr、设置 aPickerAdapter、reloadAllComponent...)进行测试,它有效。为什么我不能重新加载它?请帮助我!

ps: 我只是一个新手,英语不好。如有错误,请多多包涵,谢谢

最佳答案

我会做不同的事情。您正在尝试让您的 TableViewController 直接更新另一个 View Controller 的 View - 您不应该这样做。您需要将数据传回您的第一个 View Controller ,以便它可以更新自己的 View 。对此有多种技术(请参阅 this link ),但在您的情况下,我会在您的 View Controller 中实现一个方法并从您的自定义 TableViewController 中调用它:

在 View Controller 中:

-(void)updatePicker:(NSArray *)newArray {
aPickerAdapter = testArr;
[aPicker reloadAllComponents]
// and do anything else you need
}

在您的 CustomerTableViewController didSelectRow 方法中:

[self.delegate updatePicker:testArr];

关于ios - 从另一个 ViewController 为 UIPickerView 重新加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26355054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com