2

私はiOS開発にかなり慣れていないので、これに対する解決策に約1日取り組んできましたが、なぜそれが機能しないのかわかりません。ユーザーが使用する小さなメニューとして、ビューコントローラー内でテーブルビューを使用しようとしています。NSArray が設定されているかどうかを確認しましたが、そうです。セルが作成されているかどうかも確認しましたが、作成されています。作成したセルをテーブルビューに取り込まない理由がわかりません。以下は、私がこれまでに持っているコードです。誰でも提供できるヘルプを事前に感謝します。

MainViewController.h

#import <UIKit/UIKit.h>

@interface MainViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (weak, nonatomic) IBOutlet UITableView *menuTableView;
@property (weak, nonatomic) IBOutlet UIButton *menuButton;
@property (strong, nonatomic) NSArray *menuItemsArray;
@property (weak, nonatomic) IBOutlet UILabel *menuLabel;


@end

MainViewController.m

#import "MainViewController.h"

@interface MainViewController ()

@end

@implementation MainViewController
@synthesize menuItemsArray, menuTableView, menuButton, menuLabel;


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{

    [super viewDidLoad];

    //Set TableView Delegate/DataSource to self
    [self.menuTableView setDelegate:self];
    [self.menuTableView setDataSource:self];
    [self.menuTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
    [self.menuTableView setBounces:NO];
    [self.menuTableView setRowHeight:self.menuLabel.frame.size.height];

    self.menuItemsArray = [[NSArray alloc] initWithObjects:@"Add Category", @"Add Item", @"Settings", nil];

    NSLog(@"array: %@", menuItemsArray);
}

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

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

#pragma mark - UITableViewDelegate

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

    return ([self.menuItemsArray count]);
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"menuCell"];


    [[cell textLabel]setText:[self.menuItemsArray objectAtIndex:indexPath.row]];

    [[cell textLabel]setFont:[self.menuLabel font]];

    return cell;
}

-(void)tableView:(UITableView *)tableview didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    [self.menuTableView deselectRowAtIndexPath:indexPath animated:YES];

    NSString *selectedString = [self.menuItemsArray objectAtIndex:indexPath.row];

    self.menuLabel.text = selectedString;

}
4

5 に答える 5

1

私は同じ問題を抱えていました.View Controller内にテーブルビューが表示されませんでした。私は解決策を見つけました。コンテナ ビューを持つ別のビュー コントローラを作成できます。そして、テーブルビューコントローラーにテーブルビューを置きます。テーブル ビュー コントローラーをメール ビュー コントローラーのコンテナー ビューに埋め込むだけです。

于 2013-09-17T04:11:50.440 に答える
0

initWithNibメソッドが呼び出されていることを確認してください。[[MainController alloc] init]「menuTableView」を呼び出している場合、Nib から作成されることはありません。また、backgroundColorメイン テーブル ビューの を[UIColor red]または何かに設定してテーブル ビューを再確認し、tableView が存在し、期待するフレームがあることを確認します。他のビューの背後にある、 のフレームがある(0,0,0,0)、またはビューにまったく存在しない可能性があります。

[self.menuTableView reloadData]また、「viewDidLoad」の最後で呼び出すかmenuItemsArray、データ ソースとデリゲートを設定する前に (つまり、initWithNibメソッドで) 初期化してみてください。

そして、すべてが機能するようになったら (非常に近い)、cellForRowメソッドを次のように変更する必要があります。

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

    UITableViewCell *cell = [aTableView dequeueReusableCellWithIdentifier:@"menuCell"];
    if(!cell) {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"menuCell"];
    }

    [[cell textLabel]setText:[self.menuItemsArray objectAtIndex:indexPath.row]];

    [[cell textLabel]setFont:[self.menuLabel font]];

    return cell;
}

これにより、テーブル ビューを非常に効率的にするセルの再利用を利用できます。

于 2013-02-06T22:33:03.193 に答える