按下第一个按钮时设置的属性,在后续按下时不会更改

时间:2012-10-05 18:07:49

标签: objective-c cocoa-touch properties

我创建了一个包含一个选择器的ViewController。触发它的视图出现并使用四个数据阵列之一填充选择器,具体取决于在superview中按下了四个按钮中的哪一个。我给了子视图一个名为int的{​​{1}}属性,然后我在按钮代码中设置了它,如下所示:

pickerType

其他按钮方法看起来相同,只是 - (IBAction)chooseDepType:(id)sender { if (pickerView==nil) { pickerView = [[Picker alloc] initWithNibName:@"Picker" bundle:nil]; //send message to next view telling which array to load in picker pickerView.pickerType=1; } [self.view addSubview:pickerView.view]; } 设置为不同的值。 然后,在子视图中,我设置数据源并委托方法如下:

pickerType

我遇到的问题是,即使我在每个按钮的代码中将 -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView; { if(pickerType_ ==1) { // return the appropriate number of components, for instance return 1; } } 设置为新值,我的子视图也无法识别该值已更改。基本上,无论我按哪个按钮,它都会显示一个填充了我按下的第一个按钮对应数据的选择器。更复杂的是,superview是Master-Detail模板中的Detail视图。

pickerView属性是这样创建的:

pickerType

我正在使用ARC。我不知道这对我来说是一个愚蠢的编程错误,还是与视图的生命周期有关。

3 个答案:

答案 0 :(得分:1)

由于您正在检查是否已创建Picker

if (pickerView==nil)

在设置类型之前:

    pickerView.pickerType=1;

下次按一个按钮时,pickerView已经存在,执行会跳过if的正文并且类型不会更改。

要解决此问题,请将类型设置语句移出if块。

顺便提一下,如果你有四个按钮几乎完全相同的东西,你可以让它们全部触发相同的IBAction并区分它们的tag属性所按下的那些:

- (IBAction)showPicker: (id)sender
{
    if (pickerView==nil)
    {
       pickerView = [[Picker alloc] initWithNibName:@"Picker" bundle:nil];
    }
    // Each button's tag could correspond exactly to the appropriate pickerType,
    // or have any other meaning you choose.
    [pickerView setPickerType:[sender tag]];
    [self.view addSubview:pickerView.view];
}

答案 1 :(得分:0)

如果pickerView不是nil,那么你所做的就是让它的视图成为当前控制器的子视图(如果没有其他代码删除它,它就已经存在),而不更改属性。

答案 2 :(得分:-1)

在分配新类型后尝试调用[pickerView reloadAllComponents];