Wednesday, January 30, 2013

C помощью Custom UITableViewCell класса сделать отображение фоток по столбцам и рядам

http://hghltd.yandex.net/yandbtm?text=custom%20uitableviewcell&url=http%3A%2F%2Fwww.iPhones.ru%2Fforum%2Findex.php%2Ftopic%2F38637-custom-uitableviewcell-%25D0%25B4%25D0%25BB%25D1%258F-%25D0%25BE%25D1%2582%25D0%25BE%25D0%25B1%25D1%2580%25D0%25B0%25D0%25B6%25D0%25B5%25D0%25BD%25D0%25B8%25D1%258F-%25D0%25BD%25D0%25B5%25D1%2581%25D0%25BA%25D0%25BE%25D0%25BB%25D1%258C%25D0%25BA%25D0%25B8%25D1%2585-%25D1%2584%25D0%25BE%25D1%2582%25D0%25BE%25D0%25BA-%25D0%25B2-%25D0%25BE%25D0%25B4%25D0%25BD%25D0%25BE%25D0%25BC-%25D1%2580%2F&fmode=inject&mime=html&l10n=ru&sign=b481c6c7bda4494560f0d891024175b8&keyno=0

Отправлено 17 марта 2009 - 19:05

Вообщем пытаюсь с помощью  Custom   UITableViewCell  класса сделать отображение фоток по столбцам и рядам, то есть по по 4 фотки в ряду, но видимо опыта не хватает, помогить разобратся почему это может не работать, делаю вроде все согласно докам

Вот класс для моей ячейки

  #import "CustomCell.h"

@implementation CustomCell
@synthesize image1, image2, image3, image4;


- (id)initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
       
       
if (self = [super initWithFrame:frame reuseIdentifier:reuseIdentifier]) {
                image1
= [UIImageView alloc];
                image1
.tag =1;
               
[self.contentView addSubview:image1];
               
[image1 release];
               
                image2
= [UIImageView alloc];
                image2
.tag =2;
               
[self.contentView addSubview:image2];
               
[image2 release];
               
                image3
= [UIImageView alloc];
                image3
.tag =3;
               
[self.contentView addSubview:image3];
               
[image3 release];
               
                image4
= [UIImageView alloc];
                image4
.tag =4;
               
[self.contentView addSubview:image4];
               
[image4 release];                              
                                               
       
}
       
return self;
}

@end

а вот код , где содержимое ячейки заполняется


  // tell our table what kind of cell to use and its title for the given row
- ( UITableViewCell  *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
       
static NSString *CellIdentifier = @"CustomCell";
               
       
Image *p=[_DataItems objectAtIndex:indexPath.row];
       
       
CustomCell *cell =(CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   
       
if (cell == nil) {              
               
CGRect startingRect = CGRectMake(0.0, 0.0, 320.0, 320.0);
                cell
= [[[CustomCell alloc] initWithFrame:startingRect reuseIdentifier:CellIdentifier] autorelease];            
       
}
               
       
UIImageView *view;
       
       
for(view in cell.subviews) {
               
if ([view isKindOfClass:[UIImageView class]] && view.tag>0)
               
{                                              
                        view
.image=p.pImage;
                       
CGRect rect = view.frame;
                        rect
.size.height = 50.0;
                        rect
.size.width = 50.0;
                        view
.frame = rect;                                              
               
}      
       
}
                               
       
return cell;
}
выполняется без ошибок , вот только не одной фотки не показывается в ряду,а вообщем можно использовать это для решения моей задачи? или поискать другой метод 

#2Гость_DeveloperMaster_*

  • Гости
    • 0

Отправлено 17 марта 2009 - 19:54

лучше используй просто UIScrollView - в нем уже размещай фотки, у тебя не заметил где ты задаешь размещение в фоток в ячейке и UIImageView нужно инициализировать 

#3Гость_Grazer_*

  • Гости
    • 0

Отправлено 17 марта 2009 - 20:06

я пытался пройтись по subviews ячейки, но это видимо не срабатывает

можно ли вот так обратится к
   cell.image1.image = p.pImage;
, где pImage - UIImage 

#4Vinny786

    Активный участник

  • Пользователь
  • 252 сообщений
    • 0
  • ОС:Windows
  • Мой телефон:iPhone 2G
  • Прошивка:ne

Отправлено 18 марта 2009 - 08:28

Просмотр сообщенияGrazer (17.3.2009, 20:15) писал:

Вообщем пытаюсь с помощью  Custom   UITableViewCell  класса сделать отображение фоток по столбцам и рядам, то есть по по 4 фотки в ряду, но видимо опыта не хватает, помогить разобратся почему это может не работать, делаю вроде все согласно докам

Как-то так должно работать (вместо UILabel использовать UIImage и не надо никаких классов для ячеек). Здесь в каждой строке получится 3 столбца

  #define ROW_WIDTH 280.0
#define ROW_HEIGHT 20.0

#define LABEL_HEIGHT 20.0

#define ONE_OFFSET 7.0
#define ONE_WIDTH 40.0
#define ONE_TAG 1

#define TWO_OFFSET 45.0
#define TWO_WIDTH 173.0
#define TWO_TAG 2

#define THREE_OFFSET 223.0
#define THREE_WIDTH 70.0
#define THREE_TAG 3

-( UITableViewCell  *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{      
       
 UITableViewCell  *cell = [tableView dequeueReusableCellWithIdentifier:@"lalala"];      
       
       
if (cell == nil)
       
{              
                cell
= [[[ UITableViewCell  alloc] initWithFrame:CGRectMake(0.0, 0.0, ROW_HEIGHT, ROW_WIDTH) reuseIdentifier:@"lalala"] autorelease];
               
               
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(ONE_OFFSET, (ROW_HEIGHT - LABEL_HEIGHT) / 2.0, ONE_WIDTH, LABEL_HEIGHT)];
                label
.tag = ONE_TAG;
               
[cell.contentView addSubview:label];
               
[label release];
               
                label
= [[UILabel alloc] initWithFrame:CGRectMake(TWO_OFFSET, (ROW_HEIGHT - LABEL_HEIGHT) / 2.0, TWO_WIDTH, LABEL_HEIGHT)];
                label
.tag = TWO_TAG;
               
[cell.contentView addSubview:label];
               
[label release];
               
                label
= [[UILabel alloc] initWithFrame:CGRectMake(THREE_OFFSET, (ROW_HEIGHT - LABEL_HEIGHT) / 2.0, THREE_WIDTH, LABEL_HEIGHT)];
                label
.tag = THREE_TAG;
               
[cell.contentView addSubview:label];
               
[label release];
       
}      
       
       
UILabel *lbl1 = (UILabel *)[cell viewWithTag:ONE_TAG];
        lbl1
.text = @"one";
       
       
UILabel *lbl2 = (UILabel *)[cell viewWithTag:TWO_TAG];
        lbl2
.text = @"two";

       
UILabel *lbl3 = (UILabel *)[cell viewWithTag:THREE_TAG];        
        lbl3
.text = @"three";
       
       
return cell;
}

#5Hayate

    Гуру

  • Разработчик
  • 1 164 сообщений
    • 43
  • Город:Москва
  • ОС:Mac OS X
  • Мой телефон:iPhone 4
  • Прошивка:421

Отправлено 18 марта 2009 - 11:27

Первая ошибка:
        image1 = [UIImageView alloc];
нужно [[UIImageview alloc] initWithFrame:] и обязательно дать правильный прямоугольник

Ошибка два: рекомендованный путь поиска в ячейке в вашем случае будет:
  UIImageView *view = (UIImageView *)[cell viewWithTag: <<таг>>]; 

#6Гость_Grazer_*

  • Гости
    • 0

Отправлено 19 марта 2009 - 03:57

Спасибо огромное!!! Помогло

Есть другая проблема , которую никак не могу решить, в методе
  - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
мне нужно обрабатывать нажатие одиночное на картинку и соотвественно выбирать ее и грузить во второму уровне, для этого надо знать на какой UIImageView нажали , как это реализовать? обязательно ли задействовать UITouch нельзя ли в этом методе получить сразу ссылку на нажатый объект? 

#7Гость_DeveloperMaster_*

  • Гости
    • 0

Отправлено 19 марта 2009 - 20:30

Можешь использовать UIButton, как самый простой способ обработки нажатия:

[button setImage:image forState:UIControlStateNormal]; // для загрузки картинки своей
[button addTarget:self action:@selector(clickOnPhoto:) forControlEvents:UIControlEventTouchUpInside]; // для обработки нажатия
button.tag = buttonId; // для определения на какую фотку нажали

а уже где ты будешь размещять ее - не имеет значение 

No comments:

Post a Comment