Подтвердить что ты не робот

Как сделать push-седж при выборе UITableViewCell

У меня есть список эффектов в представлении таблицы. Я создал верхнюю правую кнопку бара, которая делает push-сегу в другом контроллере представления, что помогает создать новый эффект. Теперь я хочу добавить push segues в ячейки представления таблицы, чтобы значения эффектов, возможно, были загружены в контроллер представления эффектов эффектов, и я могу сохранить отредактированные значения.

Вопрос в том, можно ли программно создать push-сегу? Если нет, я могу передать эффект через prepareforsegue? Если я попытаюсь использовать prepareforsegue, я столкнулся с проблемой, при которой перетаскивание элемента управления из UITableView не позволяет мне создавать push-сегу в контроллер представления эффектов.

4b9b3361

Ответ 1

control перетащить из контроллера View для просмотра контроллера

From View Controller to View Controlle!

Вам нужно указать идентификатор вашего сегмента:

enter image description here

Выполните команду segue:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"yourSegue" sender:self];
}

Теперь вот что, это просто выполнит segue, если вам когда-нибудь понадобится передать некоторые данные этому контроллеру. Затем вы должны реализовать следующий делегат segue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"yourSegue"])
    {
        //if you need to pass data to the next controller do it here
    }
}

Ответ 2

Вот еще один вариант, который не требует использования didSelectRowAtIndexPath.

Вы просто подключаете segue в Interface Builder от ячейки прототипа до места назначения.

Оттуда вы можете просто:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "AffiliationDetail", let destination = segue.destinationViewController as? AffiliateDetailViewController {
        if let cell = sender as? UITableViewCell, let indexPath = tableView.indexPathForCell(cell) {
            var affiliation = affiliations[indexPath.row]
            destination.affiliation = affiliation
        }
    }
}

Ответ 3

Swift

Этот ответ показывает, как передавать данные и обновляется для Xcode 8 и Swift 3.

Вот как настроить проект.

  • Создайте проект с TableView. См. здесь для простого примера.
  • Добавьте второй ViewController.
  • Управлять перетаскиванием из первого контроллера представления с видом таблицы на второй контроллер представления. Выберите "Показать" как тип сегмента.

введите описание изображения здесь

  • Нажмите кнопку segue в раскадровке, а затем в Инспекторе атрибутов введите идентификатор "yourSegue". (Вы можете называть его так, как хотите, но вам также нужно использовать одно и то же имя в коде.)

введите описание изображения здесь

  • (Необязательно) Вы можете встроить все в контроллер навигации, выбрав первый контроллер представления в раскадровке и выбрав Редактоp > Вставить в > Контроллер навигации.

Код

Первый вид контроллера с TableView:

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    // ...


    // method to run when table view cell is tapped
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        // Segue to the second view controller
        self.performSegue(withIdentifier: "yourSegue", sender: self)
    }

    // This function is called before the segue
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        // get a reference to the second view controller
        let secondViewController = segue.destination as! SecondViewController

        // set a variable in the second view controller with the data to pass
        secondViewController.receivedData = "hello"
    }
}

Второй контроллер просмотра

class SecondViewController: UIViewController {

    @IBOutlet weak var label: UILabel!

    // This variable will hold the data being passed from the First View Controller
    var receivedData = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        print(receivedData)
    }
}

Для более простого примера о передаче данных между диспетчерами просмотра см. этот ответ.

Ответ 4

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"YourPushSegueName" sender:self];
}

Ответ 5

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MyViewController *myVController = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"StoryBordIdentifier"];
    [self.navigationController pushViewController:myVController animated:YES];
}

Ответ 6

У вас есть 2 варианта: ctrl + перетащить из ячейки прототипа в новый vc, а затем вы перейдете из каждой ячейки, и вам нужно будет выполнить подготовку к segue.

Второй вариант, в didselectrowatindexpath вы можете создать экземпляр вашего нового контроллера представлений с помощью self.storyboard instantiateviewcontrollerwithidentifier..., затем вызвать pushviewcontroller или presentviewcontroller, вам не нужны segues в раскадровке или подготовиться к segue в этом сценарии.

Ответ 7

Вы можете использовать этот метод:

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

Вы можете выполнять функцию выбора определенной ячейки таблицы.

Ответ 8

Вы можете сделать это, выполнив следующие методы:

Во-первых, вам нужно импортировать другой контроллер представления в текущий вид.

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

внутри метода выше вы должны вызвать метод - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; следующим образом:

yourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
[self.navigationController YourViewController animated:YES];

Таким образом, вы можете достичь push-сегмента при выборе UITableViewCell.

Надеюсь, это поможет вам...!

Ответ 9

Swift 3

После ответа Ahmed Daou answer → вручную перетащите segue из vc в vc в раскадровку

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.performSegue(withIdentifier: "SegueIdentifier", sender: nil)    
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "SegueIdentifier" {
        //do something you want
    }
}