下面是里面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 |
|
终于搞定了。感谢上面俩位大神。是你们给了我方向,让我知道从哪里攻破,太感谢了。
|
|
解决就好 |