13

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

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

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

- (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;
}

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

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

  • @DHamrick прав. удалите любую строку, где вы назначаете для представления. для любой таблицы, которую вы используете, какой бы она ни была написана, выполните [self.view addSubview: ...]; Вы также можете запутаться в autoresizingMask. Получите это сначала, комментируя это.

    от
  • Да, я сделал это, потому что у меня был другой TableView

    от The Man
  • Я сделал то, что вы оба сказали, и я понял это ...

    от The Man
  • Я так и сделал, но сейчас ничего не происходит. --- Извините, теперь я получаю ошибку.

    от The Man
  • Может быть, вы ошиблисьtabrleView, Так должно бытьtableView везде.

    от
  • 4

    Вместо того, чтобы устанавливать вид

    UIViewControllerдобавьте tableView как подпредставление.

    Вместо:

    self.view = tableView;
    

    Сделай это:

    [self.view addSubview:tableView];
    

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

  • 16

    @interface viewController: UIViewController<

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

    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