我正在尝试动态自定义UITableViewController
。所以我改变了cell.textLabel
的许多属性。现在我想将这些属性复制到detailTextLabel
和我通过代码创建的一个标签。怎么做?
cell.textLabel.backgroundColor = [UIColor colorWithRed:0 green:0.188235 blue:0.313725 alpha:1];
cell.textLabel.textColor=[UIColor whiteColor];
cell.textLabel.font=[UIFont fontWithName:@"HelveticaNeue" size:26];
cell.textLabel.autoresizingMask=UIViewAutoresizingFlexibleRightMargin;
这是我的 cellForRowAtIndexPath
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cell.textLabel.text=[_names objectAtIndex:indexPath.row];
cell.textLabel.tag=indexPath.row;
cell.detailTextLabel.text=[_phones objectAtIndex:indexPath.row];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"] ];
[imageView setFrame:CGRectMake(380,10,30,50)];
[cell addSubview:imageView];
//customize the seperator
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1000, 1)];/// change size as you need.
separatorLineView.backgroundColor = [UIColor grayColor];// you can also put image here
[cell.contentView addSubview:separatorLineView];
cell.contentView.backgroundColor = [UIColor colorWithRed:0 green:0.188235 blue:0.313725 alpha:1];
cell.textLabel.backgroundColor = [UIColor colorWithRed:0 green:0.188235 blue:0.313725 alpha:1];
cell.textLabel.textColor=[UIColor whiteColor];
cell.textLabel.font=[UIFont fontWithName:@"HelveticaNeue" size:26];
cell.textLabel.autoresizingMask=UIViewAutoresizingFlexibleRightMargin;
//here i want to copy the properties
return cell;
}
答案 0 :(得分:4)
对于Swift3
class MyLabel: UILabel {
override func draw(_ rect: CGRect) {
super.draw(rect)
backgroundColor = UIColor(red: 0, green: 0.188235, blue: 0.313725, alpha: 1)
textColor = UIColor.white
font = UIFont(name: "HelveticaNeue", size: 26)
autoresizingMask = .flexibleRightMargin
}
}
以这种方式创建UILabel
的子类。
#import "MyLabel.h"
@implementation MyLabel
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
self.backgroundColor = [UIColor colorWithRed:0 green:0.188235 blue:0.313725 alpha:1];
self.textColor=[UIColor whiteColor];
self.font=[UIFont fontWithName:@"HelveticaNeue" size:26];
self.autoresizingMask=UIViewAutoresizingFlexibleRightMargin;
}
@end
现在创建此MyLabel的一个对象,您的属性将自动设置,并且只需通过故事板将此类分配给您的标签到单元格中的标签。
子类化是实现可重用代码的最佳方式。
否则你甚至可以在某个类中创建类的扩展甚至类方法,它接受UILabel
并设置属性,但这些都不是最佳实践。扩展程序的另一个问题是,您只能使用self
而不能使用super
。当您必须扩展属性时,这可能会在将来产生问题。
我希望我很清楚,乐于助人。
答案 1 :(得分:2)
您可以使用此方法将UITabelViewCell
的所有标签设为同一属性
这里只循环子视图并检查子视图是否为UILabel
,如果是UILabel
,则设置所需的属性。
我的代码:
- (void)formatTheLabelForCell:(UITableViewCell *)cell
{
for (UIView *view in cell.contentView.subviews) {
if ([view isKindOfClass:[UILabel class]]) {
UILabel *lbl = (UILabel *)view;
lbl.backgroundColor = [UIColor colorWithRed:0 green:0.188235 blue:0.313725 alpha:1];
lbl.textColor=[UIColor whiteColor];
lbl.font=[UIFont fontWithName:@"HelveticaNeue" size:26];
lbl.autoresizingMask=UIViewAutoresizingFlexibleRightMargin;
}
}
}
答案 2 :(得分:2)
不是在import EEGrunt
source = 'openbci'
path = 'C:/Users/Vedant/Desktop/Pygaze/OpenBCI_2/application.windows64/SavedData/'
filename = 'OpenBCI-RAW-2016-11-28_16-23-14.txt'
session_title = "OpenBCI EEGrunt Test Data"
EEG = EEGrunt.EEGrunt(path, filename, source, session_title)
EEG.plot = 'show'
EEG.load_data()
for channel in EEG.channels:
EEG.load_channel(channel)
print("Processing channel "+ str(EEG.channel))
EEG.remove_dc_offset()
EEG.notch_mains_interference()
EEG.signalplot()
EEG.get_spectrum_data()
EEG.data = EEG.bandpass(start, stop)
EEG.spectrogram()
EEG.plot_band_power(8,12,"Alpha")
EEG.plot_spectrum_avg_fft()
EEG.showplots()
中配置单元格,而是使用自定义单元格更好。添加cellForRowAtIndexPath
&你的Storyboard / Nib本身就是imageView
。这样,所有单元格都使用这些默认属性生成。此外,如果您需要通过代码配置某些内容,可以在CustomCell.m文件中对其进行编码,如下所示:
separatorLineView
编辑:从网上下载图片可能是长时间加载单元格的原因。尝试异步下载图像。您也可以使用此库:SDWebImage
注意:我知道你想要它在Objective C中,上面Swift中的代码只是为了说明。
答案 3 :(得分:2)
至于swift,你可以这样做,它会将你应用于textLabel的所有属性复制到detailTextLabel。
cell.detailTextLabel.attributedText = cell.textLabel.attributedText
答案 4 :(得分:2)
首先,我不认为有一个功能可以复制iOS SDK中任何UIKit组件的特定属性。因此,您必须为此编写自定义函数。此外,您的" cellForRowAtIndexPath"还存在一些问题。正如其他人在评论中指出的那样。
对此有不同的解决方案。
解决方案1: 在视图控制器中编写一个函数,它将两个标签作为参数并复制您想要的值。
-(void)copyPropertiesFrom:(UILabel*)label1 toLabel:(UILabel*)label2{
label2.backgroundColor = label1.backgroundColor;
label2.textColor = label1.textColor;
label2.font = label1.font;
label2.autoresizingMask = label1.autoresizingMask;
}
在要复制的cellForRowAtIndexPath中执行此操作
[self copyPropertiesFrom:cell.titleLabel toLabel:cell.detailTextLabel];
解决方案2(推荐):这是我最好的经验,因为您可以在其他视图控制器中重复使用它。可能有比这更好的方法。
创建一个UILabel类别。请查看此链接How do I create a category in Xcode 6 or higher?以及此https://code.tutsplus.com/tutorials/objective-c-categories--mobile-10648
您在类别中的功能将如下所示。
-(void)formatLabelToMyStyle{
self.backgroundColor = [UIColor colorWithRed:0 green:0.188235 blue:0.313725 alpha:1];
self.textColor = [UIColor whiteColor];
self.font = [UIFont fontWithName:@"HelveticaNeue" size:26];
self.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
}
您将包含类别的头文件,并在您的cellForRowAtIndexPath中调用此函数,如下所示
[cell.titleLabel formatLabelToMyStyle];
[cell.detailTextLabel formatLabelToMyStyle];
[cell.customTextLabel formatLabelToMyStyle];
至于你的cellForRowAtIndexPath,注释中提到的larme"不要在单元格中添加类似的子视图,因为细胞被重复使用"这将继续为您的单元格添加视图,从而导致内存问题,特别是当您有大量的单元格时,在您的情况下是真的。
答案 5 :(得分:2)
您可以Category
使用UILabel
或使用应该共享相同样式的UILabel
子类。
Category
的{{1}}可能如下所示:
UILabel
.m文件:
// UILabel+CustomStyle.h
#import <UIKit/UIKit.h>
@interface UILabel (CustomStyle)
-(void) applyCustomStyle;
@end
然后您可以通过简单地调用:
来应用相同的样式// UILabel+CustomStyle.m
#import "UILabel+CustomStyle.h"
@implementation UILabel (CustomStyle)
-(void) applyCustomStyle {
self.backgroundColor = [UIColor colorWithRed: 0 green: 0.188235 blue: 0.313725 alpha: 1];
self.textColor = [UIColor whiteColor];
self.font = [UIFont fontWithName: @"HelveticaNeue" size: 26];
self.autoresizingMask = UIViewAutoresizingFlexibleRightMargin;
}
@end
答案 6 :(得分:2)
如果要对项目中的许多位置使用相同的标签配置。只是作为@NikhilManapure的子类说。
OR
如果要将相同的属性应用于 TableViewCell textLabel 和 detailTextLabel 。您应该创建TableViewCell的子类并在drawrect方法中覆盖Label属性。
目标-C
#import <UIKit/UIKit.h>
@interface PropertiesCell : UITableViewCell
@end
#import "PropertiesCell.h"
@implementation PropertiesCell
- (void)awakeFromNib {
[super awakeFromNib];
// Initialization code
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
}
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
[self cellLabelConfigure:self.textLabel];
[self cellLabelConfigure:self.detailTextLabel];
}
- (void)cellLabelConfigure:(UILabel*) contentLabel {
contentLabel.backgroundColor = [UIColor colorWithRed:0 green:0.188235 blue:0.313725 alpha:1];
contentLabel.textColor=[UIColor whiteColor];
contentLabel.font=[UIFont fontWithName:@"HelveticaNeue" size:26];
contentLabel.autoresizingMask=UIViewAutoresizingFlexibleRightMargin;
}
@end
夫特
class PropertiesCell: UITableViewCell {
override func draw(_ rect: CGRect) {
super.draw(rect)
cellLabelsConfigure(contentLabel: self.textLabel)
cellLabelsConfigure(contentLabel: self.detailTextLabel)
}
func cellLabelsConfigure(contentLabel: UILabel?) {
contentLabel?.backgroundColor = UIColor(red: 0.0, green: 0.188, blue: 0.313, alpha: 1.0)
contentLabel?.textColor = UIColor.white
contentLabel?.font = UIFont(name: "HelveticaNeue", size: 26.0)
contentLabel?.autoresizingMask = UIViewAutoresizing.flexibleRightMargin
}
}
在故事板中将单元格类名称更改为 PropertiesCell
答案 7 :(得分:1)
创建扩展类并使用此copy
方法将所需的所有属性传递给新标签。
@implementation UILabel (Copy)
- (UILabel *)copyProperties {
UILabel *label = [UILabel new];
[self copyPropertiesWithLabel:label];
return label;
}
- (void)copyPropertiesWithLabel:(UILabel *)label {
label.backgroundColor = self.backgroundColor;
label.textColor = self.textColor;
label.font = self.font;
label.autoresizingMask = self.autoresizingMask;
// Add more properties
}
@end
用法:
// cell.textLabel has now all the properties
[theLabelToBeCopied copyPropertiesWithLabel:cell.textLabel];