|
下面是里面TableView的代码
#import "ClassViewCell.h"
#import "MyCollectionCell.h"
#import "StringManager.h"
#import "HomeViewController.h"
#import "FreeWorkList.h"
@implementation ClassViewCell
#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
@synthesize names;
@synthesize images;
- (void)awakeFromNib {
// Initialization code
[self setUpCollection];
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
-(void)setUpCollection{
UICollectionViewFlowLayout *flowLayout=[[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
self.collectionView=[[UICollectionView alloc] initWithFrame:CGRectMake(0, 64, SCREEN_WIDTH, 200) collectionViewLayout:flowLayout];
self.collectionView.dataSource=self;
self.collectionView.delegate=self;
[self.collectionView setBackgroundColor:[UIColor clearColor]];
names=@[@"兼职",@"培训",@"活动",@"实习",@"全职",@"假期工",@"在线兼职",@"公告"];
images=@[@"jzicon.png",@"pxicon.png",@"hdicon.png",@"sxicon.png",@"qzicon.png",@"jqgicon.png",@"zxjzicon.png",@"ggicon.png"];
}
//定义展示的UICollectionViewCell的个数
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return 8;
}
//定义展示的Section的个数
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
//每个UICollectionView展示的内容
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * CellIdentifier = @"MyCollectionCell";
UINib *cellNib = [UINib nibWithNibName:@"MyCollectionCell" bundle:nil];
[self.collectionView registerNib:cellNib forCellWithReuseIdentifier:@"MyCollectionCell"];
UICollectionViewCell *cell = [self.collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
UILabel *label = (UILabel *)[cell viewWithTag:2];
UIImageView *imageVIew=(UIImageView *)[cell viewWithTag:1];
label.text=[names objectAtIndex:indexPath.row];
imageVIew.image=[UIImage imageNamed:[images objectAtIndex:indexPath.row]];
return cell;
}
#pragma mark --UICollectionViewDelegateFlowLayout
//定义每个Item 的大小
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return CGSizeMake(70, 70);
}
//定义每个UICollectionView 的 margin
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
if([[StringManager deviceString] isEqualToString:@"iPhone6"])
{
return UIEdgeInsetsMake(0, 30, 5, 20);
}
else if ([[StringManager deviceString] isEqualToString:@"iPhone6Plus"])
{
return UIEdgeInsetsMake(0, 30, 5, 20);
}
else
{
return UIEdgeInsetsMake(0, 10, 0, 0);
}
}
#pragma mark --UICollectionViewDelegate
//UICollectionView被选中时调用的方法
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell * cell = (UICollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath];
//临时改变个颜色,看好,只是临时改变的。如果要永久改变,可以先改数据源,然后在cellForItemAtIndexPath中控制。(和UITableView差不多吧!O(∩_∩)O~)
cell.backgroundColor = [UIColor clearColor];
NSLog(@"走到这里了");
}
//返回这个UICollectionView是否可以被选择
-(BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
@end
下面是主TableViewCell的代码
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if(indexPath.row==0){
//NSLog(@"cellForRowAtIndexPath:%@",tmpStr2);
UINib *cellNib = [UINib nibWithNibName:@"ClassViewCell" bundle:nil];
[self.tbView registerNib:cellNib forCellReuseIdentifier:@"ClassViewCell"];
TableViewCell *scell = [self.tbView dequeueReusableCellWithIdentifier:@"ClassViewCell"];
scell.contentView.backgroundColor = [UIColor clearColor];
UIView *backgroundView = [[UIView alloc] initWithFrame:scell.frame];
backgroundView.backgroundColor = [UIColor clearColor];
scell.selectedBackgroundView = backgroundView;
return scell;
}else if(indexPath.row==1){
UINib *cellNib = [UINib nibWithNibName:@"InfoTableViewCell" bundle:nil];
[self.tbView registerNib:cellNib forCellReuseIdentifier:@"InfoTableViewCell"];
TableViewCell *scell = [self.tbView dequeueReusableCellWithIdentifier:@"InfoTableViewCell"];
UIView *backgroundView = [[UIView alloc] initWithFrame:scell.frame];
backgroundView.backgroundColor = [UIColor clearColor];
scell.selectedBackgroundView = backgroundView;
scell.backgroundColor=[UIColor clearColor];
return scell;
}else{
static NSString *CellTableIndentifer=@"TableViewcell";
UINib *cellNib = [UINib nibWithNibName:@"TableViewCell" bundle:nil];
[self.tbView registerNib:cellNib forCellReuseIdentifier:@"TableViewCell"];
TableViewCell *scell = [self.tbView dequeueReusableCellWithIdentifier:@"TableViewCell"];
UIView *backgroundView = [[UIView alloc] initWithFrame:scell.frame];
backgroundView.backgroundColor = SELECTED_BACKGROUND;
scell.selectedBackgroundView = backgroundView;
if(fwids.count>=8)
{
scell.title=[fwnames objectAtIndex:indexPath.row-2];
scell.content=[fwcons objectAtIndex:indexPath.row-2];
scell.content2=[fwcon2s objectAtIndex:indexPath.row-2];
scell.money=[fwmoneys objectAtIndex:indexPath.row-2];
scell.city=[fwcitys objectAtIndex:indexPath.row-2];
scell.iconsrc=[UIImage imageNamed:[images objectAtIndex:indexPath.row-2]];
}
return scell;
}
}
|
|
|
求各位大神帮忙
|
|
| 50分 |
你的结构是:最外面有一个tableVIew,然后 tableView 的每一个 Cell 里都有一个 CollectionView 吗?
如果是这样的话,给 Cell 加一个回调,建议用 Block回调,然后把相关信息带出去,在 tableView 所在的 Controller 里做跳转。 |
| 50分 |
你的UITableViewCell里又封装了一个UICollectionView. 你是想点击UICollectionVIew上的cell来实现页面跳转对吧。 如果是那样的话,你可以用两种方式,一是使用delegate, 二是使用block 。熟悉哪个就用哪个,这里可以以delegate为例简单说一下
1. 在你的这个自定义UITableviewCell中,先创建一个delegate. 并编写你的协议方法 @protocol ClassViewCellDelegate <NSObject> -(void)classViewCell:(ClassViewCell *)classViewCell didSelectWithItem:(id)item; //////如果有回调的数据,可以通过item来传递 @end 2. 在ClassViewCellDelegate的头文件中增加一个属性用于声明delegate @interface ClassViewCell:UITableViewCell @property (nonatomic,assign) id<ClassViewCellDelegate> delegate; @end 3. delegate 中方法是由点击collectionViewCell 时触发的。所以在 -(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
//////除了你原有的方法外,再加上如下代码,交由代理者来处理
if ([self.delegate respondToSelector:@seletor(classViewCell:didSelectWithItem:)]) {
[self.delegate classViewCell:self didSelectWithItem:nil]; /////如果需要传递值,将值通过第二个参数传递,如果没有,设置为nil
}
}
4. 在外部使用 ClassViewCell的这个控制器上 实现定义的协议,如 @interface ViewController: UIViewController <ClassViewCellDelegate > 5. 在这个控制器中实现协议中的方法,在这里就可以处理你的跳转操作 -(void)classViewCell:(ClassViewCell *)classViewCell didSelectWithItem:(id)item {
UIViewController *vc = [UIViewController new];
//////假设是通过UINavigationController来导航的视图
[self.navigationController pushViewController:vc animated:YES];
}
|
|
方法我试过了,不成功。nslog 都打印不出东西来。 而且 -(void)classViewCell:(ClassViewCell *)classViewCell didSelectWithItem:(id)item; 这句话老是报错。 说 E什么的 a type |
|
|
方不方便把工程上传上来?
|
|
|
工程怎么传啊 我主要是个ios小白。刚开始自学。 现在就是UITableViewCell 套的UITableViewCell |
|
|
终于搞定了。感谢上面俩位大神。是你们给了我方向,让我知道从哪里攻破,太感谢了。
|
|
|
解决就好 |
|