4

私は iOS 開発に不慣れで、非常に簡単なことを理解できずに大きな頭痛の種になっています。基本的に、私は別の UITableViewController に移動するために UITableViewController を使用していますが、その 2 番目の UITableViewController から UIViewController に移動する必要があります。この UIViewController に .xib ファイルを持たせて簡単な UI を作成したいのですが、2 番目の UITableViewController からこの UIViewController にプッシュする方法が見つからないようです。プログラムでラベルを表示することはできましたが、.xib の UI を表示することはできませんでした。

これは、プログラマティック ラベルで動作するコードです。

- (void)tableView:(UITableView *)tableView
accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath
{
    self.detailController.title = @"Disclosure Button Pressed";
    NSString *selectedMovie = self.movies[indexPath.row];
    NSString *detailMessage = [[NSString alloc]
                                initWithFormat:@"This is details for %@.",
                                selectedMovie];
    self.detailController.message = detailMessage;
    self.detailController.title = selectedMovie;
    [self.navigationController pushViewController:self.detailController
                                        animated:YES];
}

これは、UILabel をプログラムで表示するために機能する UIViewController の .m です。

@implementation BIDDisclosureDetailViewController
- (UILabel *)label;
{
    return (id)self.view;
}
- (void)loadView;
{
    UILabel *label = [[UILabel alloc] init];
    label.numberOfLines = 0;
    label.textAlignment = NSTextAlignmentCenter;
    self.view = label;
}
- (void)viewWillAppear:(BOOL)animated;
{
    [super viewWillAppear:animated];
    self.label.text = self.message;
}
@end

基本的に、UIObject をプログラムで作成したくありません。UI を作成するには .xib が必要です。

ありがとう

(iOS 6、ストーリーボードを使用しない)

4

2 に答える 2

13

UIViewControllerxib から a をロードするのは簡単です。テーブルビュー デリゲートがdidSelectRowAtIndexPath:メッセージを送信すると、次のように xib をロードしてビュー コントローラーを表示できます。

BIDDisclosureDetailViewController *controller = [[BIDDisclosureDetailViewController alloc] initWithNibName:@"BIDDisclosureDetailView" bundle:nil];

[self.navigationController pushViewController:controller animated:YES];

注意すべき点:

  1. View Controller を xib からロードするのではなく、ビューのみをロードします。これが、上記のコードで、View Controller の新しいインスタンスを作成している理由です。initWithNibName:bundle:
  2. これらすべてを IB で適切に接続するには、xib の「ファイルの所有者」を正しいビュー コントローラー タイプ (BIDDisclosureDetailViewController) に設定します。
  3. そこにあるコードも必ず削除してくださいloadView。xib を使用しようとすると、問題が発生します。

サイドノート!次のようなメソッド シグネチャの末尾にセミコロンを使用しないでください。

- (void)viewWillAppear:(BOOL)animated;

それは悪い形と見なされます。

お役に立てれば!

于 2013-04-10T23:37:36.257 に答える