Попытка сделать что-то, что я видел во многих местах, но не могу справиться. Я пытаюсь передать данные из одного представления в другое во время segue.
Здесь метод prepareForSegue в представлении источника:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
//pass values
DetailViewController *dest = (DetailViewController *)[segue destinationViewController];
dest.locTitle = [value valueForKeyPath:@"title"];
dest.locInfo = [value valueForKeyPath:@"info"];
// NSLog(@"The title is: %@, and the info is: %@.",dest.locTitle,dest.locInfo);
}
Если я включу этот последний NSLog
, я вижу правильные значения...
Здесь интерфейс на вид назначения:
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController{
}
@property (strong, nonatomic) NSString *locTitle;
@property (strong, nonatomic) NSString *locInfo;
@property (weak, nonatomic) IBOutlet UILabel *detailMainText;
@property (weak, nonatomic) IBOutlet UILabel *detailTitle;
@end
... и здесь viewDidLoad и соответствующие @synthesize в представлении назначения:
@synthesize detailMainText,detailTitle,locTitle,locInfo;
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"In viewDidLoad - the title is: %@ and the info is: %@",self.locTitle,self.locInfo);
detailTitle.text = locTitle;
detailMainText.text = locInfo;
}
Это NSLog
сообщает null
значения для каждой из этих переменных.
Буду признателен за любую помощь, которую вы могли бы мне дать. Я уверен, что делаю что-то глупое и очевидное.
Заранее благодарим за помощь.
Много позже...
ОК... Думаю, я сужу его.
Я обнаружил, что (контринтуитивно)
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
получает вызов после
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
Что сбивает с толку, а также закрыл мою маленькую схему, чтобы выяснить, какой фрагмент моего источника данных NSDictionary
должен отображаться в моем подробном представлении. В настоящее время я делаю это:
// send info to detail view according to which row selected
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
//Get the selected object in order to fill out the detail view
myValue = [myLocations objectForKey:[locationsIndex objectAtIndex:indexPath.row]];
}
Но так как это происходит после, то это бесполезно. Как я могу получить доступ к номеру строки в методе prepareForSegue?
Еще раз спасибо.
... и, наконец,...
Здесь ответ на вопрос:
Как получить доступ к выбранному номеру строки в методе prepareForSegue?
Надеюсь, кто-то найдет это полезным.
Сначала настройте IBOutlet
для представления таблицы в интерфейсе контроллера listView:
@property (weak, nonatomic) IBOutlet UITableView *tableView;
Затем ваша команда prepareForSegue может сделать это:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString: @"showDetail"]) {
//pass values
NSLog(@"The sender is %@",sender);
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
//Get the selected object in order to fill out the detail view
id myValue = [myLocations objectForKey:[locationsIndex objectAtIndex:indexPath.row]];
DetailViewController *dest = [segue destinationViewController];
dest.locTitle = [myValue valueForKeyPath:@"title"];
dest.locInfo = [myValue valueForKeyPath:@"info"];
//NSLog(@"The title is: %@, and the info is: %@.",dest.locTitle,dest.locInfo);
}
}