как показать лист действий в пользовательской ячейке в Swift 4? любезно посоветуйте с примером [duplicate]

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

1
задан rmaddy 25 September 2015 в 16:51
поделиться

2 ответа

В быстром файле вашей пользовательской ячейки напишите протокол, который будет соответствовать вашему viewContoller,

// your custom cell's swift file

protocol CustomCellDelegate {
    func showActionSheet()
}

class CustomTableViewCell : UITableViewCell {
    var delegate: CustomCellDelegate?

    // This is the method you need to call when button is tapped.
    @IBAction func buttonTapped() {

        // When the button is pressed, buttonTapped method will send message to cell's delegate to call showActionSheet method.
        if let delegate = self.delegate {
            delegate.showActionSheet()
        }
    }
}

// Your tableViewController
// it should conform the protocol CustomCellDelegate

class MyTableViewController : UITableViewController, CustomCellDelegate {

    // other code

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCellWithIdentifier("CustomCellReuseIdentifier", forIndexPath: indexPath)

        // configure cell

        cell.delegate = self        

        return cell
    }

    // implement delegate method
    func showActionSheet() {

        // show action sheet

    }
}

Убедитесь, что ваш контроллер просмотра соответствует протоколу CustomCellDelegate и реализует метод showActionSheet ().

Назначьте свой viewContoller как делегат пользовательской ячейки при создании ваших ячеек в методе dataSource cellForRowAtIndexPath.

Вы можете представить свой новый контроллер представлений из метода showActionSheet в viewController.

2
ответ дан buhanserdar 18 August 2018 в 12:20
поделиться
  • 1
    Есть ли учебник, объясняющий, о чем вы говорите? Я знаю протоколы, но я не знаю, как это использовать. – يعرب المصطفى 25 September 2015 в 14:54
  • 2
    Могут быть некоторые уроки, но вместо этого я отредактировал ответ. Я надеюсь, что это будет полезно – buhanserdar 25 September 2015 в 21:33

Вот как вы это сделаете:

  1. Создайте протокол для своего клиента UITableViewCell say MyTableViewCellDelegate.
  2. Добавьте метод cellButtonTapped в свой протокол.
  3. Подключите контроллер вида (который использует эти ячейки) к MyTableViewCellDelegate, то есть в файле заголовка добавьте <MyTableViewCellDelegate>.
  4. В вашем режиме cellForRowAtIndexPath: контроллера вашего вида, когда инициализировать ячейку, присваивать себя как делегат.
  5. В вашем классе ячеек вид таблицы, когда кнопка нажата, передайте управление его делегату, который является вашим контроллером представления.
  6. Способ реализации cellButtonTapped в вашем контроллере просмотра и текущем листе действий, как вам нравится.
0
ответ дан Abhinav 18 August 2018 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: