0

私が試したものと失敗したものでこの投稿を肥大化させて混乱させるのではなく、答えはおそらく私が思っているよりも単純であると確信しているので、単純にしておきます。

アプリケーションのメインビューにスクロールUITableViewがあります。私がやろうとしているのは、スクロールするUITableViewのデフォルトの位置(つまり「開始点」)を約194ポイント下に移動して、ナビゲーションバーと他のいくつかのUI要素用のスペースを確保することです。どうすればよいですか?これが、ViewControllerの.hファイルと.mファイルからの適切なメソッド実装であると私が信じているものです。

//     MGViewController.h
//     UITVPractice

#import <Foundation/Foundation.h>

@interface ItemsViewController : UITableViewController

-(id) init;
-(id) initWithStyle:(UITableViewStyle)style;

@end



//     MGViewController.m
//     UITVPractice

#import "ItemsViewController.h"
#import "MGItem.h"
#import "MGItemStore.h"

@implementation ItemsViewController

-(void)viewDidLoad {
    UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
    self.tableView.backgroundView = backgroundImageView;

    [super viewDidLoad];
}

-(id) init {
    self = [super initWithStyle:UITableViewStyleGrouped];

    if (self) {
        /* create 5 random MGItems and place in the MGItemStore */
        for (int i = 0; i < 20; i++) {
            [[MGItemStore sharedStore] createItem];
        }
    }
    return self;
}

-(NSInteger)tableView:(UITableView *)tableView
 numberOfRowsInSection:(NSInteger)section
{
    return [[[MGItemStore sharedStore] allItems] count];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];

    /* Create an instance of UITableViewCell */
    if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                                   reuseIdentifier:@"UITableViewCell"];
    }

    UIView *backView = [[UIView alloc] initWithFrame:CGRectZero];
    backView.backgroundColor = [UIColor clearColor];
    cell.backgroundView = backView;

    /* Display custom background image for cell(s) */
    cell.backgroundView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"cellBackground.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0]];

    /* Display custom background image for selected cell(s) */
    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"cellBackgroundTouched.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0]];

    /* eliminate the white box that bounds the black text.  */
    [[cell contentView] setBackgroundColor:[UIColor clearColor]];
    [[cell backgroundView] setBackgroundColor:[UIColor clearColor]];
    [cell setBackgroundColor:[UIColor clearColor]];

    /* Set the text of the cell to the description of the item that is at the nth index of items, where n = row this cell will appear in on the tableView */
    MGItem *p = [[[MGItemStore sharedStore] allItems] objectAtIndex:[indexPath row]];
    [[cell textLabel] setText:[p description]];
    [[cell textLabel] setTextColor:[UIColor whiteColor]];
//    [[cell textLabel] highlightedTextColor: [UIColor purpleColor]];

    return cell;
}

-(id) initWithStyle:(UITableViewStyle)style {
    return [self init];
}

@end

この投稿が「dothisforme」の投稿として削除された場合はお詫び申し上げますが、私はさまざまなことを試しましたが、どれもうまくいきませんでした。これで約3日間立ち往生しています。あなたが提供できるどんな助けにも感謝します。

編集:はい、イスマエル、あなたは正しいです。これはUITableViewControllerのサブクラスです。私はあなたが言っていることを理解していると思います。今それに取り組んでいます。答えてくれた両方に感謝します。

4

2 に答える 2

2

これを行う最良の方法は、テーブルビューコントローラを別のUIView内に「ネスト」することです。ストーリーボードを使用している場合は、「コンテナビュー」を追加してから、そのビューコントローラのクラスをテーブルビューコントローラのクラスに設定します。次に、コンテナビューのサイズを変更すると、テーブルビューのサイズが自動的に変更されます。これは、1つのビューにネストされたいくつかのテーブルビューがある例です。

ここに画像の説明を入力してください

于 2012-11-26T19:36:36.017 に答える
1

私はあなたのコントローラーがサブクラスだと思いますUITableViewControllerか?その場合は、それを変更する必要があります。

これを行うには、サブクラスをに変更し、プロトコルUIViewControllerを追加します。UITableViewDelegateUITableViewDataSource

次に、UITableView * tableViewプロパティを追加し、viewDidLoadメソッドを次のように変更します。

-(void)viewDidLoad {
    [super viewDidLoad]; // [super viewDidLoad]; should go first!!

    CGFloat startingPoint = 194.0; // or whatever
    CGRect tableRect = self.view.bounds;
    tableRect.origin.y = startingPoint;
    tableRect.size.height -= startingPoint;

    self.tableView = [[UITableView alloc] initWithFrame:tableRect style:UITableViewStyleGrouped]; // or plain, whichever you need
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // do this if grouped, looks better!
    self.tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:self.tableView];

    UIImageView *backgroundImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"background.png"]];
    self.tableView.backgroundView = backgroundImageView;

}

編集:これには理由があります。通常UIViewControllerの、self.viewは、ですUIViewが、の場合UITableViewControllerself.viewはと同じでself.tableViewあり、UITableViewであるため、フレームを変更することはできません。

于 2012-11-26T19:31:42.853 に答える