一个表视图的多个按钮

时间:2013-10-25 02:51:52

标签: ios objective-c xcode

有人能指出我正确的方向吗?我有一个带多个按钮的View Controller。我希望按下按钮打开我自定义的一个Table View Controller并动态加载数据。我知道我可以为每个按钮按下多个表视图控制器,但我认为必须有一种方法来动态地执行此操作。让我明确一点,另一个视图将确定要加载到表视图控制器中的数据。我是iOS和Objective-C的新手,但不是编程,所以在火箭科学答案上轻松一点。如果您需要查看一些代码,请告诉我们。

基本上我在一个View Controller上有4个按钮,按下这些按钮将决定在Table View上加载哪些数据。让我们现在保持简单,只说数据是4个NSMutable Arrays。

编辑:基于babygau的帖子,这就是我想出的:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"allCattleSegue"]) {
        CattleTableViewController *controller = segue.destinationViewController;
        controller.cattleArray = [[NSMutableArray alloc] initWithObjects:@"cattle1",@"cattle2",@"cattle3", nil];
    }
    else if ([segue.identifier isEqualToString:@"bullsSegue"]){
        CattleTableViewController *controller = segue.destinationViewController;
        controller.cattleArray = [[NSMutableArray alloc] initWithObjects:@"bull1",@"bull2",@"bull3", nil];
    }
}

- (IBAction)allCattleTouchUpInside:(UIButton *)sender {
    [self performSegueWithIdentifier:@"allCattleSegue" sender:self];
}

- (IBAction)bullsTouchUpInside:(UIButton *)sender {
    [self performSegueWithIdentifier:@"bullsSegue" sender:self];
}

这可以完成工作,但是当我按下后退按钮时导航无法正常工作。它给了我一个空白的屏幕。

更新:调试我看到它正在调用prepareForSegue两次;一次将Controller作为发件人,再次使用按钮作为发件人。仍在尝试了解其工作原理以及如何解决此导航问题。

已解决:显然我不需要连接动作(TouchUpInside)。感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

您只需创建一个Viewcontroller和TableViewController。设置所有按钮的标签,然后在TableViewController中创建一个@property int变量,然后在下面执行此操作。

创建通用方法来触发 UIControlTouchUpInside 中的所有按钮。然后在UITableViewController中创建这样的int变量。

您创建的

TableViewController.h 文件。

@property(nonatomic,assign)int buttonSelected;

ViewController.m 创建这样的常用方法。

-(IBAction)commonMethod:(id)sender
{
TableViewController *tableVc = [[TableViewController alloc]initWithNibName:@"TableViewController" bundle:nil];
if(button.tag==0)
{
 tableVC.buttonSelected = 0;
}
if(button.tag==1)
{
tableVC.buttonSelected = 1;
}

[self.navigationController pushViewController:tableVc animated:YES];

}

TableViewConroller.m 文件执行此操作

-(void)viewDidLoad
{
[super viewDidLoad];

if(buttonPressed == 0)
{
tableDataSourceArray = ...
}
else if (buttonPressed == 1)
{
tableDataSourceArray = ...
}
}

我希望它对你有帮助..

答案 1 :(得分:0)

您可以传递类似按钮标签或标识符的信息,告诉使用哪个可变数组。

如果您在prepareForSegue方法中使用segue进行代码转换,则可以将值传递给目标TableViewController,即

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
        UITableViewController *controller = segue.destinationViewController;
        controller.buttonTitle = sender;
}

然后在按钮处理程序

[self perfomSegue:@"segue" sender:buttonTitle];

答案 2 :(得分:0)

为每个按钮分配标签。根据标签你可以填充table.simply中的不同数据。根据标签

只收集一个array.populate数据到该数组
if(button.tag==0)
{
//array=@[..];
}
if(button.tag==1)
{
//array=@[..];
}
.
.
.

现在在cellForRowWithIndexPath委托方法

中使用此数组

答案 3 :(得分:0)

假设您的表格tableViewData是一个数组。

在每个按钮操作中,您使用以下模式代码:

[self performSegueWithIdentifier:@"YOUR_IDENTIFIER" target:sender];

实施以下segue委托方法:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    YOURCUSTOMTABLEVIEWCONTROLLER *tableVC= segue.destinationViewController;
    tableVC.tableViewData = YOUR_CORRESSPONDING_MUTABLE_ARRAY;
    [tableVC.tableView reloadData];

}

就是这样,你将根据你点击的按钮动态显示tableView。

注意:您必须在4个按钮对应的View Controller之间创建4 segue,并为每个segue命名标识符。例如@“fromButton1toTableVC”,@“fromButton2toTableVC”等等...