我在UITableView
和UIViewController
中有一个CustomTableViewCell
。 CustomTableViewCell
包含两件事,
UIView
有一些标签表的数据源是具有类似属性的某些模型
modelType = image, music, video
等。对于每种模型类型,我设计了一个UIView
,该CustomTableViewCell
将在modelType
的基础上加载到UIViewController
的视图中。
我的问题是“如何将数据类型从CustomTableViewCell
传递到modelType
,然后如何在#import "ContentsTableViewCell.h"
@interface ContentsTableViewCell ()
@property NSString* feedType;
@end
@implementation ContentsTableViewCell
-(instancetype)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if(self) {
// before initializing this xib I must have feedType. . .
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"ContentsTableViewCell" owner:self options:nil];
UIView* mainView = (UIView*)[nibViews objectAtIndex:0];
[self addSubview:mainView]; }
return self;
}
@end
”的基础上初始化每个UIView。
这就是我所拥有的
public String removeDuplicates(char[] arr) {
StringBuilder sb = new StringBuilder();
if (arr == null)
return null;
int len = arr.length;
if (arr.length < 2)
return sb.append(arr[0]).toString();
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (arr[i] == arr[j]) {
arr[j] = 0;
}
}
if (arr[i] != 0)
sb.append(arr[i]);
}
return sb.toString().trim();
}
上面的代码是初始化与此.m文件关联的xib。但是如何在这里传递feedType来初始化其他视图。
答案 0 :(得分:0)
您将无法在UITableViewCell的初始化中传递任何参数,因为UITableView会在需要时将其出列或初始化。
[注意]:除非阅读解决方案2,否则不要开始实施。
解决方案1:您可以根据需要以cellForRowAtIndexPath:
方式配置此单元格。为Feed类型定义枚举并传递它。
typedef NS_ENUM(NSInteger, FeedType)
{
FeedTypeText,
FeedTypeImage,
FeedTypeAudio,
FeedTypeVideo,
};
创建单元格配置方法
@interface ContentsTableViewCell : UITableViewCell
@property (nonatomic, assign) FeedType feedType;
- (void)configureCellWithFeedType:(FeedType)feedType;
@end
@implementation ContentsTableViewCell
- (void)configureCellWithFeedType:(FeedType)feedType
{
switch (feedType) {
case FeedTypeText:
// initializing xib . .
break;
case FeedTypeImage:
// initializing xib . .
break;
case FeedTypeAudio:
// initializing xib . .
break;
case FeedTypeVideo:
// initializing xib . .
break;
}
}
@end
然后从cellForRowAtIndexPath:
方法调用此配置方法。
[cell configureCellWithFeedType:feedType];
解决方案2 上述解决方案会显着降低浏览效果。因此,最好的方法是创建四个具有相关xib视图的独立类。
@interface TextTableViewCell : UITableViewCell
@end
@interface ImageTableViewCell : UITableViewCell
@end
@interface AudioTableViewCell : UITableViewCell
@end
@interface VideoTableViewCell : UITableViewCell
@end
最后根据需要加载适当的细胞。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
ContentsTableViewCell *cell = nil;
FeedType feedType = FeedTypeAudio;
switch (feedType) {
case FeedTypeText:
cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(TextTableViewCell class)];
break;
case FeedTypeImage:
cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(ImageTableViewCell class)];
break;
case FeedTypeAudio:
cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(AudioTableViewCell class)];
break;
case FeedTypeVideo:
cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass(VideoTableViewCell class)];
break;
}
return cell;
}
希望它能解决你的问题。