Не удалось получить правильное значение indexPath.row из целевого файла C в файле Swift - PullRequest
0 голосов
/ 20 октября 2018

Файл: ContactsViewController.m

В этом файле я использую метод didSelectRowAtIndexPath, чтобы выдвинуть новый контроллер представления, чтобы отобразить информацию об имени, которое было нажато на контроллере табличного представления.View Controller, который будет отображать информацию об имени, внедряется в Swift.Часть, на которую я ссылаюсь в этом коде, находится в методе didSelectRowAtIndexPath, строка:

_myIndex = indexPath.row;

Я считаю, что indexPath.row должен возвращать индекс имени, которое было нажато в контроллере табличного представления.

#import "ContactsViewController.h"
#import "Contacts-Swift.h"

@interface ContactsViewController ()

@property (nonatomic, readwrite, strong) NSMutableArray* contacts;

@property (nonatomic, readwrite) NSInteger myIndex;

@end

@implementation ContactsViewController



-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        /*NSArray *contactArray = @[@"Johnny Appleseed", @"Paul Bunyan", @"Calamity Jane"];
        _contacts = [NSMutableArray arrayWithArray:contactArray];*/
        /*Contact *c1 = [[Contact alloc] initWithName: @"Johnny"];
        Contact *c2 = [[Contact alloc] initWithName: @"Paul Bunyan"];
        Contact *c3 = [[Contact alloc] initWithName: @"Calamity Jane"];*/
       // _contacts = [NSMutableArray arrayWithArray: @[c1, c2, c3]];
        self.contacts = [NSMutableArray array];
    }
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self.tableView registerClass: [UITableViewCell class]
           forCellReuseIdentifier:@"UITableViewCell"];
}

- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
    return self.contacts.count;
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell" forIndexPath:indexPath];
    Contact *contact = self.contacts[indexPath.row];
    cell.textLabel.text = contact.name;
    return cell;
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    ContactsViewController *viewController = [self.navigationController.storyboard instantiateViewControllerWithIdentifier:@"the"];
    [self.navigationController pushViewController:viewController animated:YES];
    _myIndex = indexPath.row;
}

Файл: ContactsViewController.h

Это файл заголовка, который я использую, чтобы иметь доступ к целевым методам и переменным C при работе в файле swift.(Я не очень хорошо знаком с целью C, поэтому существует большая вероятность того, что эта реализация является причиной моих проблем).

#import <UIKit/UIKit.h>

@interface ContactsViewController : UITableViewController <UITableViewDelegate>

@property (nonatomic, readonly) NSInteger myIndex;

@property (nonatomic, readonly, strong) NSMutableArray* contacts;

@end

Файл: ExistingContactViewController.swift

В ExistingContactViewController Iя просто пытаюсь установить метку firstName, равную тексту, который присутствует в массиве контактов в indexPath.row (в файле ContactsViewController.m).

import UIKit

@objc class ExistingContactViewController: UIViewController {

    var contactsObject = ContactsViewController()
    @IBOutlet weak var firstName: UILabel!
    @IBOutlet weak var lastName: UILabel!


    override func viewDidLoad() {
        super.viewDidLoad()
        print("\(contactsObject.myIndex)")
        firstName.text = contactsObject.contacts[contactsObject.myIndex] as? String
    }

При щелчке имен, добавляемых в контроллер табличного представления, единственный напечатанный индекс

print("\(contactsObject.myIndex)")

равен 0. Это говорит о том, что я не собираю индекс изимя, которое коснулось.

Изображение myStoryboard Самая нижняя сцена - это та, в которой я пытаюсь изменить метку имени, чтобы отобразить имя ячейки, к которой подключен.

Мне не удалось изменить название этого ярлыка при нажатии на ячейку.Я был в состоянии реализовать эту функцию при использовании просто быстрых файлов (через просмотр многочисленных видео).Я уверен, что есть ключевая концепция, которую мне не хватает в файлах C, поэтому любые предложения и / или указатели очень ценятся.Если потребуется дополнительная информация, дайте мне знать!

Спасибо.

1 Ответ

0 голосов
/ 22 октября 2018

Похоже, что в вашем didSelectRowAtIndexPath: вы помещаете ContactsViewController в стек навигации, и если я правильно понимаю, это должен быть экземпляр ExistingContactViewController.Также вы должны установить свойство contactsObject для ExistingContactViewController перед тем, как помещать его в стек навигации (до выполнения viewDidLoad), в противном случае его значение всегда будет новым ContactsViewController, что, вероятно, вызывает проблему.Надеюсь, это поможет!

...