我有 3 个类:ListItem、ListPageView、ListViewController
加载项时 ListViewController 中有代码:
ListPageView *pageView = [[ListPageView alloc] init];
pageView.delegate = self;
for(NSDictionary *_itemDetails in res)
{
// khởi tạo item của list
ListItem *item = [[ListItem alloc] initWithImage:[MEDIA_SERVER stringByAppendingString:[_itemDetails objectForKey:@"image"]]];
item.data = _itemDetails; // copy
item.center = CGPointMake(colIndex * 165 + 230 + colIndex * 30, rowIndex * 125 + 120 + rowIndex * 10);
// gán tổng số page hiện có trên server
_totalPage = [[_itemDetails objectForKey:@"pages"] intValue];
// delegate vào self để gọi sự kiện click
item.delegate = pageView;
item.tag = ITEM_TAG + i;
i++;
// set Index
colIndex++;
if(colIndex == 4)
{
rowIndex++;
colIndex = 0;
}
[pageView addSubview:item];
}
[self.view addSubview:pageView];
问题是如果我直接将 ListItem 添加到 self.view 中,ListViewController 可以委托 ListItem 的触摸事件。但是如果我将 ListItem 添加到 ListPageView 然后将 ListPageView 添加到 self.view ListViewController 不能从 ListItem 委托触摸事件。
列表项委托:
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
if ([_delegate respondsToSelector:@selector(ListItemBeginTouched:)])
{
[_delegate ListItemBeginTouched:self];
}
ListPageView 委托:
-(void)ListItemBeginTouched:(ListItem *)listItem
{
if ([_delegate respondsToSelector:@selector(ItemBeginTouched:withPageView:)])
{
[_delegate ItemBeginTouched:listItem withPageView:self];
}
}