我是iOS开发的新手,请原谅我提出愚蠢的问题或执行愚蠢的行为。
所以现在,这就是问题所在。我正在开发一个应用程序,我有一个标签栏控制器作为初始,称为[初始标签视图]。其中一个选项卡是显示所有项目的表格视图,我们可以调用此[项目视图]。一旦用户点击单元格,它将推送到另一个视图并显示详细信息,[详细信息视图]。另一个选项卡也是一个表格视图,但有静态单元格,[静态视图],我用它来选择一个项目并返回。
更清晰的图片:如果我从初始标签视图访问[项目视图],只需按照[初始标签视图] - > [项目视图] - > [详细视图]。但是,如果我首先访问[静态视图]然后转到[项目视图],则程序将类似于[初始选项卡视图] - > [静态视图] - > [项目视图] - > [静态视图]。
我不知道如何在[项目视图]中实现第二个(使用[静态视图]),有人可以帮忙吗?还是有另一种更好的方法?非常感谢。
// Code from [Item View]
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"CustomShopCell";
ShopCustomTableCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[ShopCustomTableCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:identifier];
}
if (searchResult != nil) {
//cell.textLabel.text = [searchResult objectAtIndex:indexPath.row];
Shop *shop = searchResult[indexPath.row];
if ([shop.shopNameChi length] == 0) {
cell.lblName.text = shop.shopName;
} else {
cell.lblName.text = [NSString stringWithFormat:@"%@ | %@", shop.shopName, shop.shopNameChi];
}
cell.lblLocation.text = shop.unit;
cell.imgImage.contentMode = UIViewContentModeScaleAspectFit;
cell.imgImage.image = [UIImage imageWithData:shop.imageData];
} else {
//cell.textLabel.text = [list objectAtIndex:indexPath.row];
Shop *shop = shopList[indexPath.row];
if ([shop.shopNameChi length] == 0) {
cell.lblName.text = shop.shopName;
} else {
cell.lblName.text = [NSString stringWithFormat:@"%@ | %@", shop.shopName, shop.shopNameChi];
}
cell.lblLocation.text = shop.unit;
cell.imgImage.contentMode = UIViewContentModeScaleAspectFit;
cell.imgImage.image = [UIImage imageWithData:shop.imageData];
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if(![self isKindOfClass:[NavigationMainTableViewController class]]){
[self performSegueWithIdentifier:@"showShopDetail" sender:self];
}
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
答案 0 :(得分:0)
尝试使用这个。您可以为录制的每个单元格设置该方法。
[self performSegueWithIdentifier:@"yourIdentifierHere" sender:self];
答案 1 :(得分:0)
你能做什么(如果我确定我理解你在做什么)是创建两个带有不同标识符的segue链接(名称清晰,我喜欢这种格式“fromHereToThere”)。然后在你的didselect中你可以用if语句调用你的segue,如下所示:
if (your condition){
[self performSegueWithIdentifier:@"fromHomeToStatic" sender:self];
}else{
[self performSegueWithIdentifier:@"fromHomeToDetail" sender:self];
}
然后在prepareForSegue
方法(默认情况下在每个控制器类中的注释)中,您可以选择要传递的数据,
if ([segue.identifier isEqualToString:@"fromHomeToDetail"])
{
//Manage your usual stuff here for the detail identifier
//Ask me again if you need extra help with that
}
if ([segue.identifier isEqualToString:@"fromHomeToStatic"]){
//Manage here for the static identifier
}
但我并不完全确定你对你的问题意味着什么,所以我可能完全偏离主题:D
编辑:好的,显然你想知道你在装载第三个控制器时从哪里来。所以这是一种方法。在目标控制器中,将其添加到.h
中@property (nonatomic) BOOL fromStatic;
(或任何你想要的)
然后在您的原始控制器的prepareForSegue
中,如果您来自静态,请将下一个控制器的BOOL
设置为YES
,否则,将其设置为{ {1}},像这样
NO
在目的地控制器的viewDidLoad中,只检查它是否为“是”,并做出相应的反应。
我说得对,还是我仍然对你的问题感到困惑?我仍然没有完全确定你在问什么哈哈:D
答案 2 :(得分:0)
如果您使用的是静态细胞原型。只需从单元格拖动到要推动的视图,然后选择push in segue。如果您使用的是动态UITableViewCell。您可以在didSelectRowAtIndex方法中执行Segue。