在TableViewCell上更改Label的文本

时间:2017-08-28 18:00:51

标签: ios swift uitableview swift3 segue

我有第一个视图控制器(FirstView Controller),它上面有两个TextField和一个包含TableViewCell和Label的TableView。我有第二个视图控制器(TypeViewController),它还包括TableView和TableViewCell,其中包含一个Label。

在FirstViewController上选择TableViewCell,文本为选择 - >继续查看TypeViewController

在TypeViewController上选择TableViewCell(在TypeViewController上我有单元格列表,动态加载) - >返回到FirstViewController,而不是文本选择显示在TypeViewController上选择的文本。

如何将FirstViewController上TableViewCell上的Label文本更改为TypeViewController中的文本?

第一视图控制器

import UIKit

class FirstViewController: UIViewController, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate {

    var animalTypeName: String?;

    var selectedTypeId: UInt?;
    var selectedTypeName: String?;

    override func viewDidLoad() {
        super.viewDidLoad();
    }

    // MARK: TableView && TableViewCell Methods
    // Row display.
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1;
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FirstTableViewCell;
        animalTypeName = "Choose";
        cell.typeName.text = animalTypeName;

        return cell;
    }

    //MARK: - Navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        super.prepare(for: segue, sender: sender)

        switch(segue.identifier ?? "") {
            case "ShowType":
                guard segue.destination is TypeViewController else {
                fatalError("Unexpected destination: \(segue.destination)");
                }
            default:
                fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))");
        }
    }

    //MARK: Actions
    @IBAction func unwindToCreateMedicamentController(sender: UIStoryboardSegue) {
        if let typeViewController = sender.source as? TypeViewController, let type = typeViewController.type {

            selectedTypeName = type.name;
            selectedTypeId = type.animalTypeId;
            animalTypeName = selectedTypeName;
        }
    }
}

TypeViewController

import UIKit

 class TypeViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!

    var typeList: [AnimalType]?;
    var type: AnimalType?;
    let typeController = AnimalTypeController();

    override func viewDidLoad() {
        super.viewDidLoad();
        // Call method to get array of AnimalType items.
        getArrayOfTypeItems();
    }

    //MARK: - Table view data source
    func numberOfSections(in tableView: UITableView) -> Int {
        return 1;
    }

    // Row display.
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return typeList?.count ?? 0;
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // Table view cells are reused and should be dequeued using a cell identifier.
    let cellIdentifier = "TypeTVCell";

    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? TypeTableViewCell  else {
        fatalError("The dequeued cell is not an instance of TypeTVCell.");
    }

        let typeItem = typeList?[indexPath.row];
        cell.nameOfType.text = typeItem!.name;

        return cell;
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        super.prepare(for: segue, sender: sender)

        switch(segue.identifier ?? "") {
        case "ChooseType":
            guard segue.destination is CreateMedicamentController else {
                fatalError("Unexpected destination: \(segue.destination)");
            }

            guard let selectedTypeCell = sender as? TypeTableViewCell else {
                fatalError("Unexpected sender: \(String(describing: sender))");
            }

            guard let indexPath = tableView.indexPath(for: selectedTypeCell) else {
                fatalError("The selected cell is not being displayed by the table");
        }
            let selectedType = typeList?[indexPath.row];
            type = selectedType;

        default:
            fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))")
        }
    }
}

This`s an example of my views

2 个答案:

答案 0 :(得分:1)

null方法 s 中,您需要添加以下代码:

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
            <Grid Margin="{TemplateBinding Padding}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto" />
                </Grid.ColumnDefinitions>
                <Border x:Name="columnHeaderBorder"
                        TextBlock.FontWeight="Bold"
                        TextBlock.Foreground="blue"
                        BorderThickness="2"
                        BorderBrush="blue"
                        Background="white"
                        Width="{TemplateBinding Width}"
                        Margin="3,3,3,3"
                        Padding="3,0,3,0">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                              VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
                              SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
                </Border>
                <!--BorderBrush="{Binding VerticalGridLinesBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"-->
                <Thumb x:Name="PART_RightHeaderGripper" Grid.Column="1"
                       HorizontalAlignment="Right"
                       Width="6" BorderThickness="0"
                       Margin="0,3"
                       BorderBrush="white"
                       Background="white"
                       Cursor="SizeWE">
                    <Thumb.Template>
                        <ControlTemplate>
                            <Border Background="{TemplateBinding Background}"></Border>
                        </ControlTemplate>
                    </Thumb.Template>
                </Thumb>
            </Grid>
            <ControlTemplate.Triggers>
                <Trigger Property="Content" Value="{x:Null}">
                    <!--<Setter Property="BorderBrush" Value="Red" TargetName="columnHeaderBorder"/>-->
                    <Setter Property="BorderBrush" Value="Transparent" TargetName="columnHeaderBorder"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>

答案 1 :(得分:0)

class FirstViewController: UIViewController, UITextFieldDelegate, UITableViewDataSource, UITableViewDelegate {

    var animalTypeName: String?;

    var selectedTypeId: UInt?;
    var selectedTypeName: String?;

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad();
        animalTypeName = "Choose";
    }

    // MARK: TableView && TableViewCell Methods
    // Row display.
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1;
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FirstTableViewCell;
        cell.typeName.text = animalTypeName;

        return cell;
    }

    //MARK: - Navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        super.prepare(for: segue, sender: sender)

        switch(segue.identifier ?? "") {
            case "ShowType":
                guard segue.destination is TypeViewController else {
                    fatalError("Unexpected destination: \(segue.destination)");
                }
            default:
                fatalError("Unexpected Segue Identifier; \(String(describing: segue.identifier))");
        }
    }

    //MARK: Actions
    @IBAction func unwindToCreateMedicamentController(sender: UIStoryboardSegue) {
        if let typeViewController = sender.source as? TypeViewController, let type = typeViewController.type {

            selectedTypeName = type.name;
            selectedTypeId = type.animalTypeId;
            animalTypeName = selectedTypeName;

            tableView.reloadData();
        }
    }
}
  1. animalTypeName = "Choose";移至viewDidLoad
  2. @IBOutlet weak var tableView: UITableView!
  3. 中添加FirstViewController
  4. tableView.reloadData()
  5. 中添加unwindToCreateMedicamentController(sender: UIStoryboardSegue)