iOS 7: не удается подключиться к IBOutlets, возможно, потому, что я использую UITableViewController

Я не могу создать никаких IBOutlets. Я использую tableviewcontroller вместо viewcontroller. Когда я нажимаю TableViewController, класс UITableViewController, и я не могу это изменить.

Вот мой код для ViewController.h:

//  ViewController.h
//  Tips4
//
//  Created by Meghan on 1/20/14.
//  Copyright (c) 2014 Meghan. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

@property (strong, nonatomic) IBOutlet UILabel *sliderDisplay;
@property (strong, nonatomic) IBOutlet UITextField *tempText;
@property (strong, nonatomic) IBOutlet UILabel *billTotal;
@property (nonatomic, strong) IBOutlet UISlider *slider;

- (IBAction)sliderValueChanged:(id)sender;

@property (nonatomic) float answer;
@property (nonatomic) float answerTwo;



@end

Вот мой ViewController.m:

//  ViewController.m
//  Tips4
//
//  Created by Meghan on 1/20/14.
//  Copyright (c) 2014 Meghan. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *tipsTableIdentifier = @"TipsTableCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tipsTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:tipsTableIdentifier];
    }

    return cell;
}


- (IBAction)sliderValueChanged:(id)sender
{
    float theText = [_tempText.text floatValue];
    _answer = (_slider.value * theText) / 100;
    _answerTwo = _answer + theText;
    _sliderDisplay.text = [NSString stringWithFormat:@"%1.2f", _answer];
    _billTotal.text = [NSString stringWithFormat:@"%1.2f", _answerTwo];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
     _tempText.keyboardType = UIKeyboardTypeDecimalPad;

    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

person meghan66    schedule 21.01.2014    source источник


Ответы (1)


Если вы используете TableViewController, ваш класс должен наследоваться от класса UITableViewController. Именно тогда он появится в Identity Inspector, где вы измените свой класс с UIViewController на свой класс. После этого вы сможете подключиться к IBOutlets.

Для этого просто замените текущую строку

@interface ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>

с

@interface ViewController : UITableViewController 

Теперь вам нужно добавить метод инициализации, который вызывает super, в файл .m.

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

Я надеюсь, что это будет сделано.

Кроме того, иногда изменения в коде не отображаются в Identity Inspector раскадровки. В этом случае вы можете просто выйти из окна Xcode и снова открыть проект. Это делает это.

В качестве альтернативы, если вы используете ViewController, ваш класс может наследоваться от класса UIViewController. Затем вы добавляете TableView в свое представление и добавляете экземпляр UITableView в файл контроллера (создаете IBOutlet). В этом случае ваш файл .h должен добавить UITableViewDelegate и UITableViewDataSource для заполнения таблицы, а ваш файл .m должен реализовать необходимые методы (Xcode предупредит вас об этом).

person Rahul Jiresal    schedule 21.01.2014
comment
Я просто удалил свой ответ, потому что это действительно проблема. Опубликованный класс является подклассом UIViewController, но должен быть подклассом UITableViewController. - person nhgrif; 21.01.2014
comment
UITableViewController отображается в инспекторе идентификации, и я добавил UITableViewDelegate и UITableViewDataSource в файл .h. Единственное, что я не сделал, это добавил экземпляр UITableView в файл контроллера (создал IBOutlet). как это сделать? - person meghan66; 21.01.2014
comment
Я также изменил пользовательский класс инспектора идентификации с UITableViewController на ViewController, и это стало последней частью головоломки. - person meghan66; 21.01.2014