Tableview按钮单击需要在ios中的pickerview

时间:2014-10-28 11:31:00

标签: ios iphone

在tableview按钮中创建UIpickerview单击。当第一次选择器想要显示时单击每个按钮。如果我在另一个时间点击相同的按钮选择器想隐藏并获得选择器值。在这里我把我的代码只有最后一个单元格索引完成的过程中第一个单元格索引不起作用?我怎么能解决这个问题帮助我!!!这里的屏幕! 在全球范围内创建选择器

UIPickerView * myPickerView;`和tableview中的acess

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return [_arr_tags count]; /// in tag array number of button count
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;


         /// create a button

        UIImage *ButtonImagecmt = [UIImage imageNamed:@"orangeButton@2x.png"];
        UIButton *myButtoncmt = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        myButtoncmt.frame = CGRectMake(10,50,90,35);
        [myButtoncmt setBackgroundImage:ButtonImagecmt forState:UIControlStateNormal];
        [myButtoncmt addTarget:self action:@selector(picker_select:)forControlEvents:UIControlEventTouchDown];

        [cell addSubview:myButtoncmt];

        flg=1; /// first time picker want to hide so flag set 1.




        myPickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(120, 0, 160, 180)];
        myPickerView.delegate = self;
        myPickerView.showsSelectionIndicator = YES;
        myPickerView.hidden=true;
        [cell addSubview:myPickerView];

    }


    return cell;
}
- (IBAction)picker_select:(id)search
{
    if (flg==1)
    {
        /// first time button clickt picker want to display
        myPickerView.hidden=false;
        flg=0;
    }
    else
    {
        /// secound time button click picker want to hide 
        myPickerView.hidden=true;
        flg=1;
    }

}

此代码仅适用于最后一个单元格。想要在表格视图中的所有单元格中工作

enter image description here

1 个答案:

答案 0 :(得分:1)

首先让我解释一下你的错误,之后我会建议你。 您正在声明UIPickerView * myPickerView;在以下方法的外侧

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

但是您正在初始化以下方法

中的myPickerView
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

再次尝试访问以下方法的myPickerView

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

只是对象myPickerView代表最后一个单元格pickerview。因此,无论您在表格视图中点击什么按钮,myPickerView始终代表最后一个单元格选择器视图。根据可重用性概念,在屏幕上加载最后一个单元格之前,您无法看到此选择器。 所以我建议你使用你的代码

将索引行设置为您的按钮的标记,如下面的cellForRowAtIndexPath方法

myButtoncmt.tag = indexpath.row;

现在也以同样的方式将标签设置到您的pickerview(我不推荐这个,但我试图解决您的代码问题),如下文

myPickerView.tag = [_arr_tags count]+indexpath.row;

现在 - (IBAction)picker_select :( id)使用以下代码进行搜索访问

UIButton *tempBtn =(UIButton *) search;
UITableViewCell *cell= [_tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:tempBtn.tag inSection:0]]
UIPickerView *pickerView = [cell viewWithTag:[_arr_tags count]+tempBtn.tag];
pickerView.hidden = !pickerView.isHidden;

现在你可以看到所有的采摘者。试着告诉我你的结果