有人能指出我正确的方向吗?我有一个带多个按钮的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)。感谢您的帮助。
答案 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”等等...