0

一連の UIView を含む UIScrollView があります。各 UIView には、UIImageView といくつかの UIButtons が含まれています。これらの UIView は「本」を表し、そのデータは sqlite データベースに保存されます。

ブックカバー クラス:

// Cover
_coverImageView = [[UIImageView alloc] initWithFrame:CGRectMake(SHELF_CELL_PADDING_X, SHELF_CELL_PADDING_Y, SHELF_CELL_COVER_WIDTH, SHELF_CELL_COVER_HEIGHT)];
[self addSubview:_coverImageView];

// Label
_coverTitle = [[UILabel alloc] initWithFrame:CGRectMake(SHELF_CELL_PADDING_X, SHELF_CELL_COVER_HEIGHT, SHELF_CELL_TITLE_WIDTH, SHELF_CELL_TITLE_HEIGHT)];
_coverTitle.backgroundColor = [UIColor clearColor];
_coverTitle.textAlignment = UITextAlignmentCenter;
_coverTitle.lineBreakMode = UILineBreakModeWordWrap;
_coverTitle.numberOfLines = 0;
//_coverTitle.font = [_coverTitle.font fontWithSize:10];
_coverTitle.font = [UIFont fontWithName:@"Arial-BoldMT" size:10];
[self addSubview:_coverTitle];

// New Label
_labelNew = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 35, 6)];
[self addSubview:_labelNew];

// Favourite Button
_favouriteButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_favouriteButton.frame = CGRectMake(SHELF_CELL_COVER_WIDTH - 5, -5, 23, 23);
[_favouriteButton addTarget:self action:@selector(favouriteButtonTouched) forControlEvents:UIControlEventTouchDown];
[self addSubview:_favouriteButton];

// Download Button
_downloadButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
_downloadButton.frame = CGRectMake(SHELF_CELL_COVER_WIDTH - 5, SHELF_CELL_COVER_HEIGHT - 20, 23, 23);
[_downloadButton addTarget:self action:@selector(downloadButtonTouched) forControlEvents:UIControlEventTouchDown];
[self addSubview:_downloadButton];  

そして、「ブックリストビュー」では、実際のデータを各 UIView(BookCover) に次のように設定するだけです:

scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, SHELF_SEARCH_HEIGHT + SHELF_SECTION_HEIGHT + SHELF_HEIGHT + SHELF_SECTION_HEIGHT + 5, self.view.frame.size.width, SHELF_HEIGHT)];
NSUInteger BookCoverCount = [pamphletList count];
for (int i=0; i<BookCoverCount; i++) {
    CGFloat coverX = i * 100;

    BookCover *bookCover = [[BookCoverView alloc] initWithFrame:CGRectMake(coverX, 10, SHELF_CELL_WIDTH, SHELF_CELL_HEIGHT)];
    bookCover.backgroundColor = [UIColor clearColor];
    // Set an image for cover...
    NSDictionary *bookData = [bookList objectAtIndex:i];
    NSString *bookId = [bookData objectForKey:@"id"];
    NSString *bookImageName = [bookData objectForKey:@"image"];
    NSString *bookImageDir = [NSString stringWithFormat:@"%@/%@/%@", documentDir, BOOK_FOLDER, bookId];
    UIImage *bookImageFile = [UIImage imageWithContentsOfFile:[NSString stringWithFormat:@"%@/%@", bookImageDir, bookImageName]];
    bookCover.coverImageView.image = bookImageFile;
    bookCover.coverTitle.text = [bookData objectForKey:@"title"];
    bookCover.userInteractionEnabled = YES;
    bookCover.tag = i;

    [scrollView addSubview:bookCover];
}  

ユーザーがそれらに触れるたびに、「お気に入りボタン」と「ダウンロードボタン」の画像を変更し、「UPDATE book SET is_favourite = 1 WHERE book_id = x」のようなSQLを実行する必要があります。

それらをどのように実装する必要がありますか?また、いつ SQL を実行して、ユーザーのアクションを「本」オブジェクトに反映させる必要がありますか? 私はすでにデータベースをセットアップしており、SQLを処理するクラスを持っています。繰り返しますが、このような質問をするのはとても愚かだと思います。しかし、Objective-C の初心者として、ここの専門家からのアドバイスは私にとって大きな助けになります。

どんな助けでも大歓迎です。
ありがとうございました。

4

1 に答える 1

0

いくつかの試行の後、最も簡単な方法でそれを行いました:

- (void) favouriteButtonTouched:(id)sender 
{
   UIButton *clickedButton = (UIButton*)sender;
   int bookId = clickedButton.tag;

   [db openDB];
   NSDictionary *bookData = [db getBookById:bookId];
   if (bookData != nil) 
   {
       if ([[bookData objectForKey:@"is_fav"] integerValue] == 0) {
           [_favouriteButton setImage:[UIImage imageNamed:@"star.png"] forState:UIControlStateNormal];
           [db setFavouriteForId:bookId setValue:1];
       } 
       else 
       {
           [_favouriteButton setImage:[UIImage imageNamed:@"star_empty.jpg"] forState:UIControlStateNormal];
           [db setFavouriteForId:bookId setValue:0];
       }
   }
   [db closeDB];

}  

これが UIView 要素 (この場合は UIButton) を変更し、ボタンが押されるたびに DB 操作を動的に呼び出すのが良い方法であるかどうかはまだわかりません。とにかく、これは今のところ私の解決策です...

于 2012-12-20T04:41:37.717 に答える