Ios didSelectRowIndexPath-将数据传递给其他视图控制器

Ios didSelectRowIndexPath-将数据传递给其他视图控制器,ios,objective-c,ios7,ios7.1,Ios,Objective C,Ios7,Ios7.1,我无法将当前选定的TableView行传递给其他ViewController?如何轻松做到这一点 这是我的didSelectRowAtIndexPath -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { WishlistItem *wish = [self.wishlistItem objectAtIndex:indexPath.row]; /

我无法将当前选定的
TableView
行传递给其他
ViewController
?如何轻松做到这一点

这是我的
didSelectRowAtIndexPath

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    WishlistItem *wish = [self.wishlistItem objectAtIndex:indexPath.row];
    // Pass these data to DetailViewController
    NSLog(@"Wish Item: %@", wish.wishlistItem);
    NSLog(@"Description: %@", wish.descWishItem);
    NSLog(@"Target Date: %@", wish.targetDate);
}
我如何将这些数据传递给我的具有

@property (strong, nonatomic) IBOutlet UILabel *wishLabel;
@property (strong, nonatomic) IBOutlet UITextView *descriptionTextView;
@property (strong, nonatomic) IBOutlet UILabel *detailTargetDate;
我还想知道当按row时如何转到
DetailViewController


就这些。蒂亚。如果我需要提供更多关于我的问题的信息,请告诉我。谢谢。

您应该为行选择定义一个序列,并在
prepareforsgue:
方法中传递数据,
DetailViewController *dvc = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
[self.navigationController pushViewController:dvc animated:YES];
dvc.wishLabel.text = wish.wishlistItem;
dvc.descriptionTextView.text = wish.descWishItem;
dvc.detailTargetDate.text = wish.targetDate;
您应该在类型
Wish*
中声明一个公共readwrite属性,并使用
Wish
命名,这样您就可以将选定的WishlistItem对象传递给DetailViewController实例

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([[segue identifier] isEqualToString:@"DetailViewSegue"]) {
        WishlistItem *wish = [self.wishlistItem objectAtIndex:self.tableView.indexPathForSelectedRow.row];
        DetailViewController *detailViewController = [segue destinationViewController];
        detailViewController.wish = wish;
    }
}

像这样传递变量。在DetailViewController中为变量wishtolistItem、desWichItem和targetdat创建属性

 DetailViewController *playviewcontroller = [[DetailViewController alloc] init];

playviewcontroller.wishlistItem.text = variableWhichtYouWantTopass1
playviewcontroller.descWishItem.text = variableWhichYouWantTopass2;
playviewcontroller.targetDate.text  =variableWhichYouWantTopass1;

 [self.navigationController pushViewController:playviewcontroller animated:YES];
在viewcontroller中的DidSelectRowatineXpath方法中创建detailViewController对象

 DetailViewController *playviewcontroller = [[DetailViewController alloc] init];

playviewcontroller.wishlistItem.text = variableWhichtYouWantTopass1
playviewcontroller.descWishItem.text = variableWhichYouWantTopass2;
playviewcontroller.targetDate.text  =variableWhichYouWantTopass1;

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

你需要这样做。如果您使用的是interface builder,那么声明控制器的init部分将需要更改,但我相信您可以解决这个问题

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    WishlistItem *wish = [self.wishlistItem objectAtIndex:indexPath.row];

    // Pass these data to DetailViewController
    DetailViewController *controller = [[DetailViewController alloc] init];

    controller.wishLabel.text = wish.wishlistItem;
    controller.descriptionTextView.text = wish.descWishItem;
    controller.detailTargetDate.text = wish.targetDate;

    [self.navigationController pushViewController:controller animated:YES];
}

为此,您可以使用segue。首先,您需要在故事板中创建到目标视图控制器的序列。给这个序列一个标识符。然后在你的控制器中实现这些方法

#pragma mark - Navigation

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
 {
 // Get the new view controller using [segue destinationViewController].
 // Pass the selected object to the new view controller.
     if ([segue.identifier isEqualToString:SEGUE_IDENTIFIER]) {
         DestinationController *dest = (DestinationController *)[segue destinationViewController];
         //here you can pass the data
         dest.wishLabel.text = wish.wishlistItem;
         dest.descriptionTextView.text = wish.descWishItem;
         dest.detailTargetDate.text = wish.targetDate;
         // or you can pass the entire wish object
         dest.wish = wish;
     }
 }

- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
    return NO;
}
仅当用户选择单元格时,才需要转到目标视图控制器。这就是为什么我们在第二个委托方法中返回NO。 现在实施didselectrowatinexpath

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row == ROW_INDEX {
        [self performSegueWithIdentifier:SEGUE_IDENTIFIER sender:self];
        wish = [self.wishlistItem objectAtIndex:indexPath.row];
    }
}

此处,performsguewithidentifier用于导航

如果您使用的是故事板,请遵循以下代码。我想这对你有帮助

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
  DetailViewController *detailView_controller = [self.storyboard instantiateViewControllerWithIdentifier:@"ProductID"]; // set your storyboard identifier
  detailView_controller.wishlistItem = wishLabel.text;
  detailView_controller.descItem = descriptionTextView.text;
  detailView_controller.dateItem = detailTargetDate.text;
  [self.navigationController pushViewController:detailView_controller animated:YES];
}
详细介绍ViewController.h类

 @property (nonatomic, retain) NSString *ProductName, *wishlistItem;
 @property (nonatomic, retain) NSString *ProductName, *descItem;
 @property (nonatomic, retain) NSString *ProductName, *dateItem;
详细介绍ViewController.m类

 @implementation DetailViewController
 @synthesize wishlistItem;
 @synthesize descItem;
 @synthesize dateItem;

- (void)viewDidLoad
{
    NSLog(@"wishlistItem: %@", self.wishlistItem);
    NSLog(@"descItem: %@", self.descItem);
    NSLog(@"dateItem: %@", self.dateItem);
}
我正在分享一个为故事板设置标识符的屏幕截图。(请参见右侧栏)

选择情节提要上的detailsView控制器并设置标识符

标识->情节提要ID->产品ID


我认为这将帮助您:)

r您使用storyboard?是的,我正在使用storyboard@manujmvt这里有一个非常好的详细信息,介绍如何在两个视图控制器之间传递数据。您好。我对此有疑问。使用此代码,在prepareSegue方法中。如何从那里获取所选的愿望列表项目?@Rhenzzz:您不需要从prepareForSegue跟踪所选的愿望列表项目。您可以将愿望列表项存储到didSelectRowAtIndexPath内的对象中。然后可以在prepareSegue中传递相同的变量。请参阅我编辑的答案我在显示数据时仍有问题:(你能帮我更多的忙吗?:(谢谢你的帮助。好的,你可以在你的DetailsView控制器中获得所有数据吗?还没有。我不知道为什么我不能将所有数据显示到我的DetailViewController,但当我使用“NSLog”时它显示我要传递给may detailviewcontroller的数据。@SRNok,请遵循我的代码。无论我在tableview中推送到detailviewcontroller时有什么权利,请选择Rowatindexpath。然后在detailviewcontroller属性中合成数据并与nslog核对。否则,您将得到结果。请共享您的代码,我将解决您的问题。:)如果您使用故事板,请在DetailViewController上设置标识符ID。