Как исправить "Struct", чтобы включить UIButton при нажатии, чтобы открыть URL? - PullRequest
1 голос
/ 28 апреля 2019

Вот код в структуре.Я добавил «url», но не уверен, правильно ли он добавлен в структуру во всех (3) местах.Цель состоит в том, чтобы добавить «URL» в структуру!

struct State{

var title: String
var detailText: String
var description: String
var image: UIImage
var document: String
var url: String

 init(titled: String, detailText: String, imageName: String,     description: String, document: String, url: String)
{
self.title = titled
self.detailText = detailText
self.description = description
self.image = UIImage(named: imageName) ?? UIImage(named:"default")!
self.document = document
self.url = url
  }
}

Ниже приведен код массива, который я использую для вашего обзора.Это нужно изменить?или это нормально, как я добавил "URL"?Цель в том, чтобы добавить «URL» в массив!

class SelectedState{
// variables
var name: String // Name of State.
var states: [State] // List of all States.

init(named: String,includeStates: [State]){
    name = named
    states = includeStates
}
class func getSelectedStates() -> [SelectedState]{
    return [self.Reciprocal(), self.Unilateral(), self.NoAgreement(), self.ConstitutionalCarry()]
}
// Mark: - Private Helper Methods.
private class func Reciprocal() -> SelectedState {
    // Add states that are reciprocal states.
    var states = [State]()

    states.append(State(titled: "Alabama", detailText: "Reciprocal State", imageName: "alabama", description: "some text here", document: "somePDF", **url**: "https://www.anything.com"

    states.append(State(titled: "Texas", detailText: "Reciprocal State", imageName: "texas", description: "some text here", document: "somePDF", **url:** "https://www.somethingelse.com"

Вот код для detailVC, который я хотел бы добавить «UIButton».В UIButton я добавил кнопку с main.storyboard на DetailVC.Цель состоит в том, чтобы добавить кнопку для открытия URL из массива при нажатии: я не уверен, как правильно закодировать это после добавления UIButton?

class StateDetailViewController: UIViewController, SFSafariViewControllerDelegate, UITextViewDelegate {

@IBOutlet weak var stateTitleTextLabel: UILabel!
@IBOutlet weak var stateDetailTextTitleLabel: UILabel!
@IBOutlet weak var stateDescriptionTextView: UITextView!
@IBOutlet weak var openURL: UIButton!

var state: State?

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    title = "Reciprocal Details"

    stateTitleTextLabel.text = state?.title
    stateDetailTextTitleLabel.text = state?.detailText
    stateDescriptionTextView.text = state?.description
 }

Воткод для UIViewController.Я не уверен, что мне нужно добавить дополнительный код к UIViewController, так как я добавил кнопку в DetailVC?

import SafariServices
import UIKit
class StatesTableViewController: UITableViewController {
// Mark: - Data Model
  var selectedStates: [SelectedState] =          SelectedState.getSelectedStates()

override func viewDidLoad() {
    super.viewDidLoad()

    title = "Reciprocity Agreements"
}
// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    return selectedStates.count
}
 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return selectedStates[section].states.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "stateCell", for: indexPath) as! StatesTableViewCell

    // Configure the cell...
    let selectedState = selectedStates[indexPath.section]
    let states = selectedState.states
    let state = states[indexPath.row]
    cell.state = state
    return cell
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    let selectedState = selectedStates[section]
    return selectedState.name
}

var youselectedState: State?

 override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedState = selectedStates[indexPath.section]
    let state = selectedState.states[indexPath.row]
    youselectedState = state

    performSegue(withIdentifier: "AgreementDetails", sender: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "AgreementDetails"{
        let StateDetailVC = segue.destination as!   StateDetailViewController
        StateDetailVC.state = youselectedState
     }
   }
 }

1 Ответ

0 голосов
/ 29 апреля 2019

Я нашел решение, чтобы получить URL-адреса из массива, которые открываются при нажатии кнопки. Я реализовал это:

@IBAction func watchButtonTapped(_ sender: SAButton) { if let url = URL(string: self.state!.url) { UIApplication.shared.open(url, options: [:], completionHandler: nil)

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