在单个视图中的多个表视图-iPhone

时间:2012-10-11 06:03:38

标签: iphone objective-c ios uitableview uistoryboard

我有一个用于列出用户的表视图,在按钮单击时我想显示另一个表视图弹出...就像动作表.... 任何帮助表示赞赏.... 我在这里上传一张示例图片......!

ON Show picker button click show the table view as pop up

9 个答案:

答案 0 :(得分:2)

我为迷你表创建一个单独的UITableViewController,一旦用户从大表中选择了一个单元格,就将其提供给相关的数据源。然后将迷你表的视图作为子视图添加到主视图中,可能在迷你表和大表之间有一个透明的UIView,这样用户手势就不会传递到大表。

[编辑] 您可以将相同的View Controller作为数据源并委托多个表视图。您可能已经注意到,所有UITableView的委托方法都提供对原始表视图的引用,因此您可以区分大表和迷你表,即每个表,不同单元格等可以有不同的行数。

与上面的建议大致相同,除非它不干净,你必须在每个委托方法中都有以下代码:

if(tableView.tag == kBigTableTag) { ... } 
else if (tableView.tag == kMiniTableTag) { ... }

如上所述,您仍然需要将迷你表添加为View Controller视图的子视图。我建议您为迷你表使用单独的UITableViewController,除非你有充分的理由不这样做?

希望所有这一切都有意义:)

答案 1 :(得分:2)

假设您有两个UITableView table1和table2 -

设置

table1.tag = 1;
table2.tag = 2;

将delegate和datasource属性设置为self。

在任何委托方法中,您都可以检测table by tag属性。见下文,例如。

- (NSInteger)tableView: (UITableView*)tableView numberOfRowsInSection: (NSInteger)section {
    if([tableView tag] == 1)
       {
            //do stuff for table1
            return 10;
       }
    else if([tableView tag] == 2)
       {
            //do stuff for table2
            return 20;
       }

}

答案 2 :(得分:1)

UITableView哪个主要表格查看并在主视图中添加此内容,添加一个UIView并在新视图中添加UITableView后设置为主视图的子视图.. < / p>

将新视图背景颜色设置为黑色并将alpha设置为0.85或另一个您在弹出视图中看到的颜色。

将代理和数据源提供给UITableView并管理这两个tableview只是使用以下条件..

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    if (tableView == yourFirstTable) {
        return [Array1 count];
    }
    else {
        return [Array2 count];
    }
}

我希望这可以帮助你...

:)

答案 3 :(得分:0)

在超级视图上添加第二个表视图.....

答案 4 :(得分:0)

这是你必须要做的。点击按钮,addSubView该特定框架中的UITableView。请务必将其添加到UITableView上,以便可见。如果您愿意,可以为其设置动画,使其看起来像 popoup 。希望这能给你一般的想法:) ...还有别的请问...

答案 5 :(得分:0)

您可以添加表格视图作为主视图的子视图。创建一个UIViewController类的类,并在那里添加第一个UITableView作为子视图。然后点击按钮,您可以添加第二个UITableView作为同一UIViewController的子视图。您可以从底部带一个带有滑动动画的表格视图,并在此表格视图后面添加一个叠加视图。

答案 6 :(得分:0)

有两种方法可以解决这个问题,但从UX的角度来看,最好为下拉表创建一个单独的表,使用适当的数据设置数据源。当用户从主表中选择一个单元格时。然后将小tableview作为子视图添加到主视图中。现在,为了更好的用户体验,您可以在这些表之间添加半透明视图,或者将大表的userInteractionEnable设置为NO,同时显示小表。

答案 7 :(得分:0)

在IB中添加两个表视图,一个是大全屏视图,另一个是较小的一个,其Z值大于大一个。 为每个表视图设置标记。 将小表视图隐藏值设置为YES

在每个UITableView委托方法上,检查表视图标记值并相应地继续。

if (tableView.tag == 1) {
    // load data for the large table view
}
if (tableView.tag == 2) {
    // load data for the small table view
}    

点击按钮,将小表视图隐藏值设置为NO - 这将显示小表视图。

答案 8 :(得分:0)

我会创建一个自定义视图类,并将UITableView作为子视图,原因如下:

<强> 1。可重复使用的

<强> 2。易于维护,如果您想要更改视图的外观或添加其他选项,您只需修改自定义视图,它的所有实例都将更新。

第3。团

话虽如此,以下过程就是我通常如何创建这些自定义视图:

1)创建一个新的自定义视图类

2)在自定义视图中,在.h文件的顶部创建协议,在协议声明中,指定符合此委托协议的任何视图控制器必须实现的方法。对我来说,这通常意味着我创建了选项选择方法和自定义视图关闭方法

@protocol CustomViewDelegate ....
    // all conforming View Controller must implement these methods.
    // in your case, you probably only need the optionChosen method
    -(void)optionChosen;
    -(void)customViewClose;
@endprotocol

3)在自定义视图.h文件的@interface部分中,声明一个带有协议类型的“id”变量:

id<CustomViewDelegate> delegate;

4)为你的id委托变量

创建一个属性

5)在你的.h文件中创建一个UITableView

6)创建一个set-entity方法,将传入的实体作为参数,这允许您对该实体执行操作,而不将其发送回原始视图控制器。

7)在此自定义类的.m文件

中实现表视图

8)选择一个选项后,您可以调用委托方法“optionChosen”:

// psuedo-code
-(void)tableView:(UITableView *)tableView didSelectRowAtIndePath:(NSIndexPath *)indexPath
{
    [delegate optionChosen];
}

9)最后要做的是在视图控制器中创建showCustomView()和hideCustomView():

// psuedo code
-(void)onLongPressOnTableRow
{
    // pass the custom entity to the custom view for updating
    [customeView setEntity:[arrEntities objectAtIndex:row]];

    [self showCustomView];
}

-(void)showCustomView
{
    [UIView animateWithDuration:0.5 actions:^{
        customView.alpha = 1;
    }];
}

-(void)hideCustomView
{
    [UIView animateWithDuration:0.5 actions:^{
        customView.alpha = 0;
    }];
}