Отправлено 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_*
Отправлено 17 марта 2009 - 19:54
лучше используй просто UIScrollView - в нем уже размещай фотки, у тебя не заметил где ты задаешь размещение в фоток в ячейке и UIImageView нужно инициализировать
#3Гость_Grazer_*
Отправлено 17 марта 2009 - 20:06
я пытался пройтись по subviews ячейки, но это видимо не срабатывает
можно ли вот так обратится к
можно ли вот так обратится к
cell.image1.image = p.pImage;, где pImage - UIImage
#4
Отправлено 18 марта 2009 - 08:28
Grazer (17.3.2009, 20:15) писал:
Как-то так должно работать (вместо 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;
}
#5
Отправлено 18 марта 2009 - 11:27
Первая ошибка:
image1 = [UIImageView alloc];
нужно [[UIImageview alloc] initWithFrame:] и обязательно дать правильный прямоугольник
Ошибка два: рекомендованный путь поиска в ячейке в вашем случае будет:
UIImageView *view = (UIImageView *)[cell viewWithTag: <<таг>>];
image1 = [UIImageView alloc];
нужно [[UIImageview alloc] initWithFrame:] и обязательно дать правильный прямоугольник
Ошибка два: рекомендованный путь поиска в ячейке в вашем случае будет:
UIImageView *view = (UIImageView *)[cell viewWithTag: <<таг>>];
#6Гость_Grazer_*
Отправлено 19 марта 2009 - 03:57
Спасибо огромное!!! Помогло
Есть другая проблема , которую никак не могу решить, в методе
Есть другая проблема , которую никак не могу решить, в методе
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPathмне нужно обрабатывать нажатие одиночное на картинку и соотвественно выбирать ее и грузить во второму уровне, для этого надо знать на какой UIImageView нажали , как это реализовать? обязательно ли задействовать UITouch нельзя ли в этом методе получить сразу ссылку на нажатый объект?
#7Гость_DeveloperMaster_*
Отправлено 19 марта 2009 - 20:30
Можешь использовать UIButton, как самый простой способ обработки нажатия:
[button setImage:image forState:UIControlStateNormal]; // для загрузки картинки своей
[button addTarget:self action:@selector(clickOnPhoto:) forControlEvents:UIControlEventTouchUpInside]; // для обработки нажатия
button.tag = buttonId; // для определения на какую фотку нажали
а уже где ты будешь размещять ее - не имеет значение
[button setImage:image forState:UIControlStateNormal]; // для загрузки картинки своей
[button addTarget:self action:@selector(clickOnPhoto:) forControlEvents:UIControlEventTouchUpInside]; // для обработки нажатия
button.tag = buttonId; // для определения на какую фотку нажали
а уже где ты будешь размещять ее - не имеет значение
No comments:
Post a Comment