Табличное представление как объект в представлении - как инициализировать с массивом данных? - PullRequest
0 голосов
/ 02 сентября 2011

Моя цель - иметь что-то вроде опции «выбрать» в форме HTML, но теперь в моем приложении. После проведения исследования, вероятно, лучше всего сделать это с помощью табличного представления. Я хоть из вида сборщика, но фиксированная высота слишком большая.

С помощью построителя интерфейса я просто поместил табличное представление на мой подкласс UIViewController.

Как мне заполнить представление таблицы параметрами? Я видел много учебных пособий, но они все для того, чтобы иметь UITableView в качестве своего собственного класса и заполнять весь экран. В моем приложении это всего лишь маленький кусочек всей формы.

Какой кошмар создать такую ​​относительно простую вещь, как табличное представление. Либо происходит сбой, либо я получаю табличное представление, которое покрывает весь мой вид и которое ничем не заполнено.

Переменная countryTable связана с объектом в конструкторе интерфейсов.

Разочарован после тяжелого рабочего дня. Кто-нибудь получил полный рабочий код? Это было бы прекрасно. У меня уже был отличный взгляд на объяснение Apple и различные учебные пособия, но я не могу понять это.

Я пробовал несколько вещей, но это мой текущий код:

@interface myView: UIViewController
{
    NSArray *countryArray;
    IBOutlet UITableView * countryTable;
}
    @property (nonatomic, retain) UITableView *countryTabel;
@end

и в моем .m файле

@implementation myView
@synthesize countryTable;

- (void)loadView
{
    self.countryTable.dataSource = self;
}

- (void)viewDidLoad
{
NSArray *array = [[NSArray alloc] initWithObjects:@"test1", @"test2",
                  @"test3",nil];
self.countryTable = array;
[array release];   

[super viewDidLoad];
// Do any additional setup after loading the view from its nib.


}

- (void) dealloc
{
    [countryTable release];
    [super dealloc];
}

#pragma mark -
#pragma mark Table View Data Source Methods

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

- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
    UITableViewCell *cell = [tableView
                             dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
                                      reuseIdentifier:SimpleTableIdentifier] autorelease];
    }

    NSUInteger row = [indexPath row];
    cell.textLabel.text = [countryTable objectAtIndex:row];
    return cell;

}
@end

1 Ответ

0 голосов
/ 02 сентября 2011

Вы на правильном пути. Если бы вы использовали подкласс UITableViewController, вы, очевидно, имели бы полноэкранное представление таблицы по умолчанию. Идти по пути использования подкласса UIViewController с UITableView в качестве подпредставления в представлении UIViewController - это правильный путь. Вот несколько вещей, на которые вам нужно обратить внимание:

1) В заголовочный файл UIViewControllers вам нужно добавить <UITableViewDatasource, UITableViewDelegate>, поскольку ваш контроллер представления отвечает за заполнение, реализующее это функционально.

2) В viewDidLoad:, установите self.contryTable.delegate = self; и self.countryTable.datasource = self;

Следующие методы протокола должны быть реализованы следующим образом:

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

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

 -(UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
    if (cell == nil) {
         cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault
                                       reuseIdentifier:SimpleTableIdentifier] autorelease];
    }

   NSUInteger row = [indexPath row];
   cell.textLabel.text = [countryArray objectAtIndex:row];

   return cell;

}

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

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