从数组中一一获取元素并创建按钮

Posted

技术标签:

【中文标题】从数组中一一获取元素并创建按钮【英文标题】:getting element from array one by one and createbutton 【发布时间】:2016-12-01 07:38:40 【问题描述】:

我有一个 UItextFeild 作为搜索栏,点击打开了建议的 tableview。现在我想点击该行并在下面的视图中创建一个带有标签的按钮,如图所示。我怎样才能实现这个

我想要一个一个,当我点击行时,它会在视图上创建一个按钮并隐藏 UITableView 然后我再次开始搜索并再次点击其他行创建一个具有不同 X 值的按钮。

 _selectednames = [NSMutableArray arrayWithCapacity:self.sortedArray.count];


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
       
           // MGContactItemsModel *model = _arrayForContacts[indexPath.row];
    self.searchText.text = [NSString stringWithFormat:@"%@",[_sortedArray  objectAtIndex:indexPath.row]];
self.tableView.hidden = YES;

[_selectednames addObject:_searchText.text];

for (int i; i < _selectednames.count ; i++) 
    [self makeLabelsAndButtons:i];

       

现在在我的 makeLabelsAndButtons 函数中我做了这样的事情

CGFloat xOffset = 10.0f;
int buttonCount = 0;

CGRect buttonFrame = CGRectMake(xOffset, 10.0, 50.0, 15.0);

NSString *nameString = [self.selectednames objectAtIndex:indexPath];

     UIButton *_button = [UIButton buttonWithType:UIButtonTypeCustom];
    [_button addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
   //_button.frame = CGRectMake(xOffset, 10.0, 50.0, 15.0);
   for(int i=buttonCount; i >0;i++) 

    xOffset = xOffset+10;


    buttonFrame.origin.x += buttonFrame.size.width+xOffset;






 _button.frame = buttonFrame;
   buttonCount++;


_button.tag = indexPath;



//button.center = CGPointMake(xOffset, 10.0f);
//[button setBackgroundImage:[UIImage imageNamed:picString] forState: UIControlStateNormal];
[_button setTitle:self.selectednames[indexPath] forState:UIControlStateNormal];
_button.backgroundColor = [UIColor lightGrayColor];
    _button.titleLabel.font = [UIFont fontWithName:@"Arial" size:8.0f];

    _button.layer.cornerRadius = 10.0f;
    _button.layer.masksToBounds = YES;

[self.buttonView addSubview:_button];
NSLog(@"name: %@", nameString);

在点击按钮时它也会被删除。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

它对我有用。请尝试一下。

 y=20;
 x=20;

            for (int i=0; i<[arrAssignUsers count]; i++) 
                CGRect screenRect=[[UIScreen mainScreen]bounds];
                CGFloat screenWidth=screenRect.size.width;


                [arrBtnStatus addObject:[NSNumber  numberWithBool:NO]];

                NSString *strNames=[arrAssignUsers objectAtIndex:i];
                stringsize=[strNames sizeWithAttributes:
                            @NSFontAttributeName: [UIFont systemFontOfSize:20.0f]];
                btn=[UIButton buttonWithType:UIButtonTypeRoundedRect];
                CGFloat m=x+stringsize.width+10;
                CGFloat n=screenWidth-20;

                if (m<=n) 
                    btn.frame=CGRectMake(x, y,stringsize.width,stringsize.height);
                    x=x+stringsize.width +10;
                
                else
                
                    y=y+stringsize.height+10;
                    x=20;
                    btn.frame=CGRectMake(x, y,stringsize.width,stringsize.height);
                    x=x+stringsize.width+10;
                

                [btn setTitle:self.arrAssignUsers[i] forState:UIControlStateNormal];
                [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                btn.tag=i;
                [btn addTarget:self
                        action:@selector(notifyButtonPressedInEditTask:) forControlEvents:UIControlEventTouchUpInside];

                btn.backgroundColor=WHITE_COLOR;
                btn.layer.cornerRadius=10;
                [btn.layer setMasksToBounds:YES];
                btn.layer.borderWidth=2.0f;
                btn.layer.borderColor=[UIColor orangeColor].CGColor;

                [self checkNotifybtnStatus:btn];
                [cell addSubview:btn];
            
        

这可能对你有帮助。谢谢

【讨论】:

什么是 arrBtnstaus 和 stringSize ,我的意思是你为什么使用这个数组..?你能解释一下吗 请按向上箭头 实际上我们创建的按钮在每次新创建按钮时都会一次又一次地变成......该怎么办..? 没有按钮 == 数组计数?如果你想在每次点击行时创建多个按钮,那么首先从数组中删除所有对象然后添加 意思是我不明白。请解释一下哥们。谢谢【参考方案2】:

您可以使用 UICollectionView 创建按钮。你需要做的就是 1.根据需要创建带有按钮的自定义单元格 2.当您点击表格视图单元格时,将项目添加到数组并重新加载 UICollectionView 3. 显示按钮,它会自动为你添加滚动视图。

当您点击 UICollectionView 单元格时,从数组中删除对象并重新加载 UICollectionView。 与添加按钮和设置框架相比,这将更容易。

并以与文本长度相同的方式设计 UICollectionView 单元格,为此使用 NSLayoutConstraints。它将快速而流畅地工作。 代码将是最少且可重复使用的。

【讨论】:

你能给我一些实际上是 ios 开发新手的代码吗?无论如何谢谢你的帮助。 我不能提供完整的代码,但我肯定可以为您提供一些参考链接。这些是:github.com/keighl/KTCenterFlowLayout 使用它,您可以根据文本创建具有动态宽度和高度的 tableview 单元格。【参考方案3】:

试试这个工作代码... 将 UIScrollView 放在 Xib 中作为按钮

//Adding menu buttons
    btnArray = @[@"SYMPTOMATIC", @"SOCIAL", @"VOCATIONAL", @"PERSONAL"];
    [self addButtonsInScrollMenu:btnArray];


/**
 *  Add Menu Buttons in Menu Scroll View
 *
 *  @param buttonArray Array containing all menu button title
 */

#pragma mark - Add Menu Buttons in Menu Scroll View
-(void) addButtonsInScrollMenu:(NSArray *)buttonArray

    CGFloat buttonHeight = self.menuScrollView.frame.size.height;
    CGFloat cWidth = 0.0f;

    for (int i = 0 ; i<buttonArray.count; i++)
    
        NSString *tagTitle = [buttonArray objectAtIndex:i];
        CGFloat buttonWidth = [self widthForMenuTitle:tagTitle buttonEdgeInsets:kDefaultEdgeInsets];
        UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(cWidth, 0.0f, buttonWidth, buttonHeight);
        [button setTitle:tagTitle forState:UIControlStateNormal];
        button.titleLabel.font = [UIFont fontWithName:@"Roboto-Regular" size:12.0f];
        [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        //[button setTitleColor:[UIColor lightGrayColor] forState:UIControlStateSelected];
        [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
        button.tag = i;
        [self.menuScrollView addSubview:button];


        UIView *bottomView = [[UIView alloc] initWithFrame:CGRectMake(0, button.frame.size.height - kButtonBorderHeight, button.frame.size.width, kButtonBorderHeight)];
        bottomView.backgroundColor = [UIColor darkTextColor];
        bottomView.tag = 1001;
        [button addSubview:bottomView];


        if (i == 0)
        
            button.selected = YES;
            [bottomView setHidden:NO];
        
        else
        
            [bottomView setHidden:YES];
        

        cWidth += buttonWidth;
    

    NSLog(@"scroll menu width->%f",cWidth);
    self.menuScrollView.contentSize = CGSizeMake(cWidth, self.menuScrollView.frame.size.height);

【讨论】:

我的数组元素在点击 tableview 行时增加 只需在每个按钮单击时在数组中添加新元素并调用'addButtonsInScrollMenu'方法。 在 didSelectRowAtIndexPath [btnArray addObject:@"row 5"]; 并调用 [self addButtonsInScrollMenu:btnArray]; 或者你可以在每次选择任何表格行时只传递一个字符串而不是 NSArray。

以上是关于从数组中一一获取元素并创建按钮的主要内容,如果未能解决你的问题,请参考以下文章

从本地存储中一一检索数组列表

删除元素后,子组件无法从其父组件获取数组。

如何从数组中一次获取一个对象?

如何获取数组的每个元素? [关闭]

获取上一个/下一个按钮的元素索引

单击按钮数组获取当前隐藏的html元素值数组