Вопрос по iphone, ios, objective-c, xcode – Создание TableVIew программно с Objective-C iOS

13

Я новичок в разработке приложений для iOS и самой Objective C, поэтому у меня, вероятно, очень простой вопрос.

В настоящее время у меня есть следующий метод, который вызывается из нажатия кнопки панели инструментов. Метод предназначен для создания табличного представления в переменной кадраfr.

<code>- (IBAction)addGolfer:(id)sender {
    CGRect fr = CGRectMake(101, 45, 100, 416);

    UITableView *tabrleView = [[UITableView alloc]
      initWithFrame:fr
      style:UITableViewStylePlain];

    tabrleView.autoresizingMask =
      UIViewAutoresizingFlexibleHeight |
      UIViewAutoresizingFlexibleWidth;
    tabrleView.delegate = self;
    tabrleView.dataSource = self;
    [tabrleView reloadData];

    self.view = tableView;
}
</code>

Результат вызова этого метода не тот, который я ожидаю. Вместо создания табличного представления во фрейме «fr» табличное представление заполняет весь экран.

Опять же, я совершенно новый и буду признателен за любые ответы и любые предложения. Спасибо!

Ваш Ответ

3   ответа
4

Вместо того, чтобы устанавливать видUIViewControllerдобавьте tableView как подпредставление.

Вместо:

self.view = tableView;

Сделай это:

[self.view addSubview:tableView];

Это будет правильно уважать кадр, который вы установили.

Может быть, вы ошиблисьtabrleView, Так должно бытьtableView везде.
Я сделал то, что вы оба сказали, и я понял это ... The Man
Да, я сделал это, потому что у меня был другой TableView The Man
Я так и сделал, но сейчас ничего не происходит. --- Извините, теперь я получаю ошибку. The Man
@DHamrick прав. удалите любую строку, где вы назначаете для представления. для любой таблицы, которую вы используете, какой бы она ни была написана, выполните [self.view addSubview: ...]; Вы также можете запутаться в autoresizingMask. Получите это сначала, комментируя это.
16

Step 1: Добавить делегатаUITableViewDataSource,UITableViewDelegate

@interface viewController: UIViewController<UITableViewDataSource,UITableViewDelegate>
{
   UITableView *tableView;
}

Step 2:

-(void)viewDidLoad
{
    tableView=[[UITableView alloc]init];
    tableView.frame = CGRectMake(10,30,320,400);
    tableView.dataSource=self;
    tableView.delegate=self;
    tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"Cell"];
    [tableView reloadData];
    [self.view addSubview:tableView];
}

Step 3: Свойства для таблицы (строки и столбец)

// - Нет строк в таблице

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

// - Высота заголовка таблицы, если необходимо

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
   return 50;
}

// - Присвоить данные ячейкам

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier   forIndexPath:indexPath] ;

   if (cell == nil)
   {
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
   }
   cell.textLabel.text=[your_array objectAtIndex:indexPath.row]; ***(or)*** cell.textLabel.text = @"Hello";
   return cell;
}

// - Операция при касании клеток

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   // Your custom operation
}
20

Когда вы установитеdataSource а такжеdelegate свойства для вашегоUITableView, значит, вы должны написать хотя бы эти методы дляdataSource:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;

Если вы этого не сделаете, это будет сбой. Резюме, вы получите это (this code may contain syntax or logic errors - Я написал это в блокноте):

@interface YourViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> {
    UITableView *firstTableView;
    UITableView *secondTableView;
}

@end

//

@implementation YourViewController

#pragma mark - Objects Processing

- (void)addGolfer:(UIBarButtonItem *)sender {
    if (secondTableView) {
        [secondTableView removeFromSuperView];
        secondTableView = nil;
    }

    secondTableView = [[UITableView alloc] initWithFrame:CGRectMake(101, 45, 100, 416)];
    secondTableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    secondTableView.delegate = self;
    tabrleView.dataSource = self;

    [self.view addSubview:secondTableView];
}

#pragma mark - TableView DataSource Implementation

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if (tableView == firstTableView) { // your tableView you had before
        return 20; // or other number, that you want
    }
    else if (tableView == secondTableView) {
        return 15; // or other number, that you want
    }
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil)
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];

    cell.backgroundView = [[UIView alloc] init];
    [cell.backgroundView setBackgroundColor:[UIColor clearColor]];
    [[[cell contentView] subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

    if (tableView == firstTableView) { // your tableView you had before
        // ...
    }
    else if (tableView == secondTableView) {
        cell.titleLabel.text = [NSString stringWithFormat:@"Cell %d", indexPath.row + 1];
    }

    return cell;
}

@end

Похожие вопросы