如何传递int的数据?
Posted
技术标签:
【中文标题】如何传递int的数据?【英文标题】:How to pass data of an int? 【发布时间】:2014-06-12 17:09:24 【问题描述】:只是一个小问题。我有一个根视图控制器 (AufnahmeIstTableViewController) 和一个详细视图控制器 (AufnahmeISTDetailTableViewController)
我还有一个名为 istAufnahmeInt 的 int。当用户在我的根视图控制器上选择第 1 行时,我的 int 值设置为 0。当按下第 2 行时,值设置为 1,...。
在我的 prepareForSegue 方法中,我有以下代码:
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if([segue.identifier isEqualToString:@"DetailView"])
AufnahmeISTDetailTableViewController *controller =(AufnahmeISTDetailTableViewController *)segue.destinationViewController;
controller.istAufnahmeInt = //What should I enter here? ;
那么,我必须在哪里输入我的评论才能获得我的 istAufnahmeInt 的值?
我使用故事板。
为了完成:这是我的 didSelectRowAtIndexPath 方法:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
AufnahmeISTDetailTableViewController *categories = [[AufnahmeISTDetailTableViewController alloc]init];
if ([[self.categoryArray objectAtIndex:indexPath.row] isEqual:@"Gesetze"])
categories.istAufnahmeInt = 0;
if ([[self.categoryArray objectAtIndex:indexPath.row] isEqual:@"Messmittel"])
categories.istAufnahmeInt = 1;
if ([[self.categoryArray objectAtIndex:indexPath.row] isEqual:@"Dritte"])
categories.istAufnahmeInt = 2;
[categories setTitle:[self.categoryArray objectAtIndex:indexPath.row]];
【问题讨论】:
您是想在 segue 之前在您的视图控制器上设置istAufnahmeInt
的值,还是从视图控制器 检索值?
Passing Data Between View Controllers DidSelectRowsAtIndexPath Storyboards 的可能重复项
不,这不是重复的:他想知道如何传递数据,我想知道如何传递整数
传递整数就是传递数据,只是一个更具体的例子。
【参考方案1】:
您的 didSelectRowAtIndexPath:
方法实际上并没有做任何事情 - 它分配并初始化一个 AufnahmeISTDetailTableViewController
,但随后对该控制器不做任何事情,因此它在该方法结束时消失。
您要做的是根据当前选择的 tableView 行在prepareForSegue:
中的控制器上设置istAufnahmeInt
值-基本上,将didSelectRowAtPath:
中的逻辑放入prepareForSegue:
.
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if([segue.identifier isEqualToString:@"DetailView"])
AufnahmeISTDetailTableViewController *controller = (AufnahmeISTDetailTableViewController *)segue.destinationViewController;
if ([[self.categoryArray objectAtIndex:[self.tableView indexPathForSelectedRow].row] isEqual:@"Gesetze"])
controller.istAufnahmeInt = 0;
if ([[self.categoryArray objectAtIndex:[self.tableView indexPathForSelectedRow].row] isEqual:@"Messmittel"])
controller.istAufnahmeInt = 1;
if ([[self.categoryArray objectAtIndex:[self.tableView indexPathForSelectedRow].row] isEqual:@"Dritte"])
controller.istAufnahmeInt = 2;
[controller setTitle:[self.categoryArray objectAtIndex:[self.tableView indexPathForSelectedRow].row]];
【讨论】:
很抱歉,但我不知道在我的 prepareforsegue 方法中输入什么。请你帮助我好吗? :) 对不起,我是开发新手 我粘贴的代码应该完全按照您的prepareForSegue:
方法工作,只要您的tableview 被称为tableView
。如果它被称为其他名称,则必须将 tableView
更改为变量名称,但除此之外,这应该是您需要的。
非常感谢!我一直在挣扎和寻找大约3天!!!!!!真的真的非常感谢!!!!【参考方案2】:
你很困惑。正如其他海报之一指出的那样,在您的 didSelectRowAtIndexPath 方法中,您正在创建一个新的 AufnahmeISTDetailTableViewController 对象,在其上设置属性,然后忘记它。不要那样做。
你要做的是将一个整数实例变量的值设置为当前行号,这样你就可以记住它。然后,在您的 prepareForSegue 方法中,获取指向目标视图控制器的指针,将其转换为正确的类型,并传递您保存的整数值。
顺便问一下,什么应该触发你的 segue?在表格视图中选择一行应该直接触发 segue,还是用户必须做其他事情?
【讨论】:
以上是关于如何传递int的数据?的主要内容,如果未能解决你的问题,请参考以下文章
ASP Action函数 如何接收前台ajax传递的数据(编辑中。。。)