iPhone:在视图或TableView中使用滚动条设置水平添加UIButton?

时间:2011-09-14 21:29:54

标签: iphone

我正在开发一个iPhone应用程序,我需要在视图中使用滚动条设置向水平显示UIButtons(每行两个带有背面图像的按钮)。我创建了一个tabbar应用程序。请参考随附的样本图片。我该如何开发这样的屏幕?我是否需要创建只有一行的tableview,我可以在其中水平添加带有背面图像的UIButtons(或)我如何轻松实现它?有可用的示例程序吗? 注意:单击按钮时,我还需要知道单击了哪个按钮。我对所有按钮都有动作..

请帮忙!

enter image description here

更新:

我能够水平地实现图像按钮(连续两个按钮)。我的问题是,我如何正确标记它,以便我能够正确地采取行动。

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



UITableViewCell *cell=[[UITableViewCell alloc]init];
    static NSString *CellIdentifier1 = @"Cell";
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
//    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier1] autorelease];
    //}

tableView.separatorStyle=UITableViewCellSeparatorStyleNone;
        cell.backgroundColor = [UIColor clearColor];

    UIButton *btn1 = [[UIButton alloc] initWithFrame:CGRectMake(11.0, 6.0, 80.0, 65.0)];
    //UIImageView *imageView = [UIImage imageNamed:@"avatar.png"];
    btn1.enabled = YES;
    // btn1.tag = ?????;   // HOW can it tag it properly.
    [btn1 setBackgroundImage:[UIImage imageNamed:@"image1.png"] forState:UIControlStateNormal];
    [btn1 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:btn1];


    UIButton *btn2 = [[UIButton alloc] initWithFrame:CGRectMake(180.0, 6.0, 80.0, 65.0)];        
    [btn2 addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
    // btn2.tag = ?????;   // HOW can it tag it properly as it is in horizontal position.
    [btn2 setImage:[UIImage imageNamed:@"image2.png"] forState:UIControlStateNormal];        
    [cell.contentView addSubview:btn2];

}

-(IBAction) buttonPressed: (id) sender
{
    UIButton *button = (UIButton *)sender;
    NSLog(@"Btn Tag: %d", [sender tag]);

}

5 个答案:

答案 0 :(得分:0)

我认为你要做的是打开nib(.xib)文件并通过将它们拖到视图上来添加四个UIButton。然后,您可以向他们添加背景图像(首先将图像添加到项目中,然后将文件添加到项目中,然后为您的UIButton设置各种状态(选中,正常,禁用,突出显示)。如果他们呼叫不同IBActions,然后您已经知道按下了哪个按钮。如果没有,您可以在Interface Builder中为每个按钮设置一个标签(如1或2或3或4)。然后在您的IBAction中,检查sender.tag == 1,2,3或4,以确定单击了哪个按钮。

答案 1 :(得分:0)

你应该看看Kirby Turner的开源项目KTPhotoBrowser。最初是为照片而设计的,但缩略图是具有图像背景的按钮,并以网格形式显示。

答案 2 :(得分:0)

这样做的两种方法你可以放一个表视图和一个滚动视图但是在滚动视图中你必须保持按钮所使用的滚动视图的大小和区域。但是在表格视图中你的工作很容易就可以了在单元格内容上给出一个按钮,并将标签indexpath.row分配给按钮,然后隐藏表格单元格的行,它看起来就像是一个滚动视图。我希望​​它会有所帮助

答案 3 :(得分:0)

你必须以这种方式首先给出你想要给出的表格视图颜色或背景,并通过这个删除表格视图的行,这会让你觉得你在一个不在表格视图上的视图< / p>

TableView.separatorStyle=UITableViewCellSeparatorStyleNone;

然后使用

清除单元格
cell.backgroundColor = [UIColor clearColor];

现在以这种方式创建表所需的主要内容

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

NSString *CellIdentifier = [NSString stringWithFormat:@"identifier_%d", indexPath.row];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//if (cell == nil)
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ;
UIButton *contactUsBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        contactUsBtn.frame = CGRectMake(220, 10, 20, 20);
        contactUsBtn.tag = indexPath.row;
        [contactUsBtn setBackgroundImage:[UIImage imageNamed:@"TroubleImg.png"] forState:UIControlStateNormal];
        [contactUsBtn addTarget:self action:@selector(contactUsBtnAction:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:contactUsBtn];

}
     return cell;
}

,选择器会喜欢这个

-(void)contactUsBtnAction:(UIButton*)sender
{
    UIButton *Button = (UIButton *)sender;
    NSLog(@"Selected button tag is %d", Button.tag);


}

并检查功能

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"index path %d",indexPath.row);
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}

我认为这会对你有更多帮助。

答案 4 :(得分:0)

现在你必须这样做,至少你会知道按钮的工作量会很容易。在我的代码中,我假设我有100个按钮,所以首先不要在表格视图中使用静态标识符,单元格就像这样使用代码。

NSString * CellIdentifier = [NSString stringWithFormat:@“identifier_%d”,indexPath.row];     UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];     // if(cell == nil)     if(cell == nil)     {         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

//现在我假设按钮是100,所以我将indexrow指向第一个按钮,将indexrow + 100标签指向另一个按钮,代码就像这样按钮将全局或本地取决于你

按下按钮时调用的函数为 UIButton * Button =(UIButton *)发送者; NSLog(@“选中的按钮标签是%d”,Button.tag);

将以3位数字打印值的标签是右手按钮,另一个是左手按钮,但我假设只有100个按钮,所以检查出你的逻辑。

谢谢,