Как получить индексный путь в prepareForSegue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Action"])
{
NSIndexPath *indexPath = [self.tbl indexPathForSelectedRow];
SecondViewController *destViewController = segue.destinationViewController;
destViewController.getString = [getArray objectAtIndex:indexPath.row];
}
}
Я хочу получить доступ к указанному index
строки, но покажу null
для каждой выбранной строки. пожалуйста помогите?
Ответы
Ответ 1
Swift 3.0/iOS 10
tableView.indexPathForSelectedRow
был представлен в iOS 9
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let indexPath = tableView.indexPathForSelectedRow{
let selectedRow = indexPath.row
let detailVC = segue.destination as! ParkDetailTableVC
detailVC.park = self.parksArray[selectedRow]
}
}
Ответ 2
Два случая:
1) Segue
связанный с viewController
Вызовите segue
из вашего метода didSelectRowAtIndexPath
, передайте indexPath
как sender
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"Action" sender:indexPath];
}
Затем вы можете получить indexPath в качестве отправителя в prepareForSegue:sender:
method
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Action"])
{
NSIndexPath *indexPath = (NSIndexPath *)sender;
SecondViewController *destViewController = segue.destinationViewController;
destViewController.getString = [getArray objectAtIndex:indexPath.row];
}
}
2) segue, подключенный из ячейки
Нет необходимости реализовывать метод didSelectRowAtIndexPath
и performSegueWithIdentifier:
Вы можете напрямую получить sender
как UITableviewCell
в prepareForSegue:sender:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"Action"])
{
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
SecondViewController *destViewController = segue.destinationViewController;
destViewController.getString = [getArray objectAtIndex:indexPath.row];
}
}
Ответ 3
Как это
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UITableViewCell *)sender {
FTGDetailVC *detailVC = (id)segue.destinationViewController;
NSIndexPath *indexPath = [self.tableView indexPathForCell:sender];
FTGNote *note = self.notes[indexPath.row];
[detailVC updateWithNote:note];
}
Ответ 4
извините, я не понимаю, что вы хотите сделать. возможно получить indexPath.row
через этот метод UITAbleViewDelegate
который он вызвал, когда вы нажимаете на ячейку вашего tableView:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
self.myVariable = indexPath.row
}
и тогда вы можете получить доступ к этому значению в prepareForSegue
следующим образом:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
//do something with self.myVariable
}
Надеюсь, я тебе помог.