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。