Расширение общего доступа iOS, параметры конфигурации (tableView) - PullRequest
2 голосов
/ 09 мая 2019

, пожалуйста, со мной, что я совершенно новичок в Swift и iOS ..

Я пытаюсь сделать «выбор команды» на своем расширении общего ресурса.В идеале я хочу иметь возможность коснуться нижнего колонтитула «Команда» и выбрать несколько команд из табличного представления и, наконец, поделиться / опубликовать выбранные команды.

enter image description here

Я следую учебному пособию с 2016 года, но, к сожалению, к настоящему моменту оно уже устарело, и я не смог найти ни одного подобного, который был бы актуален.(если вы знаете одну, пожалуйста, ссылку)

Я создал TeamTableViewController.swift (UITableViewController) с жестко закодированным teamList, который я надеюсь заполнить в расширении общего ресурса.

мой файл UITableViewControllerвыглядит так:

import UIKit

protocol TeamViewProtocol {
  func sendingViewController(viewController: TeamTableViewController, sentItem: String)
}

class TeamTableViewController: UITableViewController {

  var teamList: [String] = ["Team 1", "Team 2", "Team 3", "Team 4", "Team 5"]
  var delegate: TeamViewProtocol?

    override func viewDidLoad() {
        super.viewDidLoad()

        self.clearsSelectionOnViewWillAppear = false
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
      return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return self.teamList.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TeamCell", for: indexPath) 

        cell.textLabel!.text = self.teamList[indexPath.item]

        return cell
    }

}

Мой файлер ShareViewController выглядит следующим образом:

import UIKit
import Social

class ShareViewController: SLComposeServiceViewController, TeamViewProtocol {

  var item: SLComposeSheetConfigurationItem!
  var teamPickerVC: TeamTableViewController!

    override func isContentValid() -> Bool {
        // Do validation of contentText and/or NSExtensionContext attachments here
        return true
    }

    override func didSelectPost() {
        // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.

        // Inform the host that we're done, so it un-blocks its UI. Note: Alternatively you could call super's -didSelectPost, which will similarly complete the extension context.
        self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
    }

  override func configurationItems() -> [Any]! {
    self.item = SLComposeSheetConfigurationItem()

    self.item.title = "Team"
    self.item.value = "None"

    self.item.tapHandler = {
      self.teamPickerVC = TeamTableViewController()
      self.pushConfigurationViewController(self.teamPickerVC)
    }

    return [self.item]
  }

  func sendingViewController(viewController: TeamTableViewController, sentItem: String) {
    self.item.value = sentItem
    self.popConfigurationViewController()
  }

}

Когда я нажимаю на окно расширения нижнего колонтитула «Команда» весьрасширение закрывается без сообщения об ошибке.Однако, если я установил в жестко закодированный массив teamList пустой массив, тогда расширения не будут аварийно завершать работу, а вместо этого отображать табличное представление с пустыми строками.

Чего мне не хватает в моих жестко закодированных командахпоказать как ячейка / строки / строки?в табличном представлении?

Ответы [ 2 ]

1 голос
/ 09 мая 2019

Вы должны вернуть правильное количество разделов или можете удалить этот метод, поэтому он примет значение по умолчанию numerOfSections как 1

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
  return 1
}

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

0 голосов
/ 10 мая 2019

После долгих проб и ошибок.Наконец, я нашел сообщение на форуме о правильной реализации функции tableView, которая вызывает с аргументом cellForRowAt

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  var cell = tableView.dequeueReusableCell(withIdentifier: "TeamCell")

  if cell == nil {
    cell = UITableViewCell(style: .default, reuseIdentifier: "TeamCell")
  }

  cell!.textLabel!.text = self.teamList[indexPath.item]
  return cell!
}

Это было непросто отладить, и не было ни ошибок, ни исключений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...