@@ -7,14 +7,112 @@
# import "AIReportVC.h"
@ interface AIReportVC ( )
# pragma mark - AIReportOptionCell
@ interface AIReportOptionCell : UITableViewCell
@ property ( nonatomic , strong ) UILabel * titleLabel ;
@ property ( nonatomic , strong ) UIButton * selectButton ;
@ property ( nonatomic , assign ) BOOL isSelectedOption ;
@ end
@ implementation AIReportOptionCell
- ( instancetype ) initWithStyle : ( UITableViewCellStyle ) style reuseIdentifier : ( NSString * ) reuseIdentifier {
if ( self = [ super initWithStyle : style reuseIdentifier : reuseIdentifier ] ) {
self . backgroundColor = [ UIColor clearColor ] ;
self . selectionStyle = UITableViewCellSelectionStyleNone ;
[ self setupUI ] ;
}
return self ;
}
- ( void ) setupUI {
[ self . contentView addSubview : self . titleLabel ] ;
[ self . contentView addSubview : self . selectButton ] ;
[ self . titleLabel mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . left . equalTo ( self . contentView ) . offset ( 16 ) ;
make . centerY . equalTo ( self . contentView ) ;
make . right . lessThanOrEqualTo ( self . selectButton . mas_left ) . offset ( -10 ) ;
} ] ;
[ self . selectButton mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . right . equalTo ( self . contentView ) . offset ( -16 ) ;
make . centerY . equalTo ( self . contentView ) ;
make . width . height . mas_equalTo ( 24 ) ;
} ] ;
}
- ( void ) setIsSelectedOption : ( BOOL ) isSelectedOption {
_isSelectedOption = isSelectedOption ;
self . selectButton . selected = isSelectedOption ;
}
- ( UILabel * ) titleLabel {
if ( ! _titleLabel ) {
_titleLabel = [ [ UILabel alloc ] init ] ;
_titleLabel . font = [ UIFont systemFontOfSize : 14 ] ;
_titleLabel . textColor = [ UIColor colorWithRed : 0.1 green : 0.1 blue : 0.1 alpha : 1.0 ] ;
}
return _titleLabel ;
}
- ( UIButton * ) selectButton {
if ( ! _selectButton ) {
_selectButton = [ UIButton buttonWithType : UIButtonTypeCustom ] ;
[ _selectButton setImage : [ UIImage imageNamed : @ "report_nor_icon" ] forState : UIControlStateNormal ] ;
[ _selectButton setImage : [ UIImage imageNamed : @ "report_sel_icon" ] forState : UIControlStateSelected ] ;
_selectButton . userInteractionEnabled = NO ;
}
return _selectButton ;
}
@ end
# pragma mark - AIReportVC
@ interface AIReportVC ( ) < UITableViewDelegate , UITableViewDataSource , UITextViewDelegate >
// / 滚 动 容 器
@ property ( nonatomic , strong ) UIScrollView * scrollView ;
// / 内 容 容 器
@ property ( nonatomic , strong ) UIView * contentView ;
// / 举 报 原 因 卡 片
@ property ( nonatomic , strong ) UIView * reasonCardView ;
// / 举 报 原 因 标 题
@ property ( nonatomic , strong ) UILabel * reasonTitleLabel ;
// / 举 报 原 因 列 表
@ property ( nonatomic , strong ) UITableView * reasonTableView ;
// / 举 报 原 因 数 据
@ property ( nonatomic , strong ) NSArray < NSString * > * reportReasons ;
// / 当 前 选中 的 索 引
@ property ( nonatomic , assign ) NSInteger selectedIndex ;
// / 举 报 原 因 TableView
@ property ( nonatomic , strong ) UITableView * tableView ;
// / 选 中 的 举 报 原 因 索 引 集 合
@ property ( nonatomic , strong ) NSMutableSet < NSNumber * > * selectedReason Indexes ;
// / 选 择 内 容 卡 片
@ property ( nonatomic , strong ) UIView * contentCardView ;
// / 选 择 内 容 标 题
@ property ( nonatomic , strong ) UILabel * contentTitleLabel ;
// / 选 择 内 容 列 表
@ property ( nonatomic , strong ) UITableView * contentTableView ;
// / 选 择 内 容 数 据
@ property ( nonatomic , strong ) NSArray < NSString * > * contentOptions ;
// / 选 中 的 内 容 索 引 集 合
@ property ( nonatomic , strong ) NSMutableSet < NSNumber * > * selectedContentIndexes ;
// / 举 报 描 述 卡 片
@ property ( nonatomic , strong ) UIView * descriptionCardView ;
// / 举 报 描 述 标 题
@ property ( nonatomic , strong ) UILabel * descriptionTitleLabel ;
// / 举 报 描 述 输 入 框
@ property ( nonatomic , strong ) UITextView * descriptionTextView ;
// / 占 位 符 标 签
@ property ( nonatomic , strong ) UILabel * placeholderLabel ;
// / 字 数 统 计 标 签
@ property ( nonatomic , strong ) UILabel * countLabel ;
// / 提 交 按 钮
@ property ( nonatomic , strong ) UIButton * submitButton ;
@@ -27,68 +125,186 @@
- ( void ) viewDidLoad {
[ super viewDidLoad ] ;
self . view . backgroundColor = [ UIColor colorWithRed : 0.1 green : 0.1 blue : 0.1 alpha : 1.0 ] ;
self . view . backgroundColor = [ UIColor colorWithRed : 0.95 green : 0.95 blue : 0.95 alpha : 1.0 ] ;
self . kb_titleLabel . text = KBLocalized ( @ "Report" ) ;
self . selectedIndex = -1 ;
// / 1 : 初 始 化 数 据
[ self initData ] ;
// / 2 : 控 件 初 始 化
[ self setupUI ] ;
// / 3 : 绑 定 事 件
[ self bindActions ] ;
}
# pragma mark - 1 : 初 始 化 数 据
- ( void ) initData {
self . reportReasons = @ [
KBLocalized ( @ "Inappropriate content " ) ,
KBLocalized ( @ "Spam or advertising " ) ,
KBLocalized ( @ "Harassment or bullying " ) ,
KBLocalized ( @ "False information " ) ,
KBLocalized ( @ "Intellectual property violation " ) ,
KBLocalized ( @ "Other " )
KBLocalized ( @ "Pornographic And Vulgar " ) ,
KBLocalized ( @ "Politically Sensitive " ) ,
KBLocalized ( @ "Insult Attacks " ) ,
KBLocalized ( @ "Bloody Violence " ) ,
KBLocalized ( @ "Suicide And Self Harm " ) ,
KBLocalized ( @ "Plagiarism Infringement " ) ,
KBLocalized ( @ "Invasion Of Privacy" ) ,
KBLocalized ( @ "False Rumor" ) ,
KBLocalized ( @ "Other Harmful Information" )
] ;
self . contentOptions = @ [
KBLocalized ( @ "Character Name And Description" ) ,
KBLocalized ( @ "Picture" ) ,
KBLocalized ( @ "Timbre" )
] ;
self . selectedReasonIndexes = [ NSMutableSet set ] ;
self . selectedContentIndexes = [ NSMutableSet set ] ;
}
# pragma mark - 2 : 控 件 初 始 化
- ( void ) setupUI {
[ self . view addSubview : self . tableView ] ;
[ self . tableView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . kb_navView . mas_bottom ) . offset ( 20 ) ;
make . left . right . equalTo ( self . view ) ;
make . bottom . equalTo ( self . submitButton . mas_top ) . offset ( -20 ) ;
} ] ;
// 先 添 加 提 交 按 钮 ( 因 为 scrollView 的 约 束 依 赖 它 )
[ self . view addSubview : self . submitButton ] ;
[ self . submitButton mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . left . equalTo ( self . view ) . offset ( 40 ) ;
make . right . equalTo ( self . view ) . offset ( -40 ) ;
make . bottom . equalTo ( self . view ) . offset ( - KB_SAFE _BOTTOM - 3 0) ;
make . bottom . equalTo ( self . view ) . offset ( - KB_SAFE _BOTTOM - 2 0) ;
make . height . mas_equalTo ( 50 ) ;
} ] ;
[ self . view addSubview : self . scrollView ] ;
[ self . scrollView addSubview : self . contentView ] ;
[ self . scrollView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . kb_navView . mas_bottom ) ;
make . left . right . equalTo ( self . view ) ;
make . bottom . equalTo ( self . submitButton . mas_top ) . offset ( -10 ) ;
} ] ;
[ self . contentView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . edges . equalTo ( self . scrollView ) ;
make . width . equalTo ( self . scrollView ) ;
} ] ;
// 举 报 原 因 卡 片
[ self . contentView addSubview : self . reasonCardView ] ;
[ self . reasonCardView addSubview : self . reasonTitleLabel ] ;
[ self . reasonCardView addSubview : self . reasonTableView ] ;
[ self . reasonCardView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . contentView ) . offset ( 16 ) ;
make . left . equalTo ( self . contentView ) . offset ( 16 ) ;
make . right . equalTo ( self . contentView ) . offset ( -16 ) ;
} ] ;
[ self . reasonTitleLabel mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . reasonCardView ) . offset ( 16 ) ;
make . centerX . equalTo ( self . reasonCardView ) ;
} ] ;
CGFloat reasonTableHeight = self . reportReasons . count * 44 ;
[ self . reasonTableView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . reasonTitleLabel . mas_bottom ) . offset ( 8 ) ;
make . left . right . equalTo ( self . reasonCardView ) ;
make . height . mas_equalTo ( reasonTableHeight ) ;
make . bottom . equalTo ( self . reasonCardView ) . offset ( -8 ) ;
} ] ;
// 选 择 内 容 卡 片
[ self . contentView addSubview : self . contentCardView ] ;
[ self . contentCardView addSubview : self . contentTitleLabel ] ;
[ self . contentCardView addSubview : self . contentTableView ] ;
[ self . contentCardView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . reasonCardView . mas_bottom ) . offset ( 16 ) ;
make . left . equalTo ( self . contentView ) . offset ( 16 ) ;
make . right . equalTo ( self . contentView ) . offset ( -16 ) ;
} ] ;
[ self . contentTitleLabel mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . contentCardView ) . offset ( 16 ) ;
make . centerX . equalTo ( self . contentCardView ) ;
} ] ;
CGFloat contentTableHeight = self . contentOptions . count * 44 ;
[ self . contentTableView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . contentTitleLabel . mas_bottom ) . offset ( 8 ) ;
make . left . right . equalTo ( self . contentCardView ) ;
make . height . mas_equalTo ( contentTableHeight ) ;
make . bottom . equalTo ( self . contentCardView ) . offset ( -8 ) ;
} ] ;
// 举 报 描 述 卡 片
[ self . contentView addSubview : self . descriptionCardView ] ;
[ self . descriptionCardView addSubview : self . descriptionTitleLabel ] ;
[ self . descriptionCardView addSubview : self . descriptionTextView ] ;
[ self . descriptionCardView addSubview : self . placeholderLabel ] ;
[ self . descriptionCardView addSubview : self . countLabel ] ;
[ self . descriptionCardView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . contentCardView . mas_bottom ) . offset ( 16 ) ;
make . left . equalTo ( self . contentView ) . offset ( 16 ) ;
make . right . equalTo ( self . contentView ) . offset ( -16 ) ;
make . bottom . equalTo ( self . contentView ) . offset ( -16 ) ;
} ] ;
[ self . descriptionTitleLabel mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . descriptionCardView ) . offset ( 16 ) ;
make . centerX . equalTo ( self . descriptionCardView ) ;
} ] ;
[ self . descriptionTextView mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . descriptionTitleLabel . mas_bottom ) . offset ( 12 ) ;
make . left . equalTo ( self . descriptionCardView ) . offset ( 12 ) ;
make . right . equalTo ( self . descriptionCardView ) . offset ( -12 ) ;
make . height . mas_equalTo ( 100 ) ;
make . bottom . equalTo ( self . descriptionCardView ) . offset ( -30 ) ;
} ] ;
[ self . placeholderLabel mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . top . equalTo ( self . descriptionTextView ) . offset ( 8 ) ;
make . left . equalTo ( self . descriptionTextView ) . offset ( 5 ) ;
make . right . equalTo ( self . descriptionTextView ) . offset ( -5 ) ;
} ] ;
[ self . countLabel mas_makeConstraints : ^ ( MASConstraintMaker * make ) {
make . right . equalTo ( self . descriptionCardView ) . offset ( -16 ) ;
make . bottom . equalTo ( self . descriptionCardView ) . offset ( -8 ) ;
} ] ;
}
# pragma mark - 3 : 绑 定 事 件
- ( void ) bindActions {
UITapGestureRecognizer * tap = [ [ UITapGestureRecognizer alloc ] initWithTarget : self action : @ selector ( dismissKeyboard ) ] ;
tap . cancelsTouchesInView = NO ;
[ self . view addGestureRecognizer : tap ] ;
}
- ( void ) dismissKeyboard {
[ self . view endEditing : YES ] ;
}
# pragma mark - UITableViewDataSource
- ( NSInteger ) tableView : ( UITableView * ) tableView numberOfRowsInSection : ( NSInteger ) section {
return self . reportReasons . count ;
if ( tableView = = self . reasonTableView ) {
return self . reportReasons . count ;
} else {
return self . contentOptions . count ;
}
}
- ( UITableViewCell * ) tableView : ( UITableView * ) tableView cellForRowAtIndexPath : ( NSIndexPath * ) indexPath {
UITableView Cell * cell = [ tableView dequeueReusableCellWithIdentifier : @ "ReportCell" forIndexPath : indexPath ] ;
cell . backgroundColor = [ UIColor clearColor ] ;
cell . selectionStyle = UITableViewCellSelectionStyleNone ;
cell . textLabel . text = self . reportReasons [ indexPath . row ] ;
cell . textLabel . textColor = [ UIColor whiteColor ] ;
cell . textLabel . font = [ UIFont systemFontOfSize : 16 ] ;
AIReportOption Cell * cell = [ tableView dequeueReusableCellWithIdentifier : @ "AI ReportOption Cell" forIndexPath : indexPath ] ;
// 选 中 状 态
if ( indexPath . row = = self . selectedIndex ) {
cell . accessoryType = UITableViewCellAccessoryCheckmark ;
cell . tintColor = [ UIColor colorWithRed : 0.8 green : 1.0 blue : 0.6 alpha : 1.0 ] ;
if ( tableView = = self . reasonTableView ) {
cell . titleLabel . text = self . reportReasons [ indexPath . row ] ;
cell . isSelectedOption = [ self . selectedReasonIndexes containsObject : @ ( indexPath . row ) ] ;
} else {
cell . accessoryType = UITableViewCellAccessoryNone ;
cell . titleLabel . text = self . contentOptions [ indexPath . row ] ;
cell . isSelectedOption = [ self . selectedContentIndexes containsObject : @ ( indexPath . row ) ] ;
}
return cell ;
@@ -97,28 +313,72 @@
# pragma mark - UITableViewDelegate
- ( void ) tableView : ( UITableView * ) tableView didSelectRowAtIndexPath : ( NSIndexPath * ) indexPath {
self . selectedIndex = indexPath . row ;
[ tableView reloadData ] ;
NSMutableSet * selectedSet ;
// 更 新 提 交 按 钮 状 态
self . submitButton . enabled = YES ;
self . submitButton . alpha = 1.0 ;
if ( tableView = = self . reasonTableView ) {
selectedSet = self . selectedReasonIndexes ;
} else {
selectedSet = self . selectedContentIndexes ;
}
NSNumber * indexNum = @ ( indexPath . row ) ;
if ( [ selectedSet containsObject : indexNum ] ) {
[ selectedSet removeObject : indexNum ] ;
} else {
[ selectedSet addObject : indexNum ] ;
}
[ tableView reloadRowsAtIndexPaths : @ [ indexPath ] withRowAnimation : UITableViewRowAnimationNone ] ;
}
- ( CGFloat ) tableView : ( UITableView * ) tableView heightForRowAtIndexPath : ( NSIndexPath * ) indexPath {
return 56 ;
return 44 ;
}
# pragma mark - UITextViewDelegate
- ( void ) textViewDidChange : ( UITextView * ) textView {
self . placeholderLabel . hidden = textView . text . length > 0 ;
// 限 制 200 字
if ( textView . text . length > 200 ) {
textView . text = [ textView . text substringToIndex : 200 ] ;
}
self . countLabel . text = [ NSString stringWithFormat : @ "%ld/200" , ( long ) textView . text . length ] ;
}
# pragma mark - Actions
- ( void ) submitButtonTapped {
if ( self . selectedIndex < 0 ) {
[ KBHUD showError : KBLocalized ( @ "Please select a reason" ) ] ;
if ( self . selectedReasonIndexes . count = = 0 ) {
[ KBHUD showError : KBLocalized ( @ "Please select at least one report reason" ) ] ;
return ;
}
NSString * reason = self . reportReasons [ self . selectedIndex ] ;
NSLog ( @ "[AIReportVC] 举报人设 ID: %ld, 原因: %@" , ( long ) self . personaId , reason ) ;
if ( self . selectedContentIndexes . count = = 0 ) {
[ KBHUD showError : KBLocalized ( @ "Please select at least one content type" ) ] ;
return ;
}
// 收 集 选 中 的 举 报 原 因
NSMutableArray * selectedReasons = [ NSMutableArray array ] ;
for ( NSNumber * index in self . selectedReasonIndexes ) {
[ selectedReasons addObject : self . reportReasons [ index . integerValue ] ] ;
}
// 收 集 选 中 的 内 容 类 型
NSMutableArray * selectedContents = [ NSMutableArray array ] ;
for ( NSNumber * index in self . selectedContentIndexes ) {
[ selectedContents addObject : self . contentOptions [ index . integerValue ] ] ;
}
NSString * description = self . descriptionTextView . text ? : @ "" ;
NSLog ( @ "[AIReportVC] 举报人设 ID: %ld" , ( long ) self . personaId ) ;
NSLog ( @ "[AIReportVC] 举报原因: %@" , selectedReasons ) ;
NSLog ( @ "[AIReportVC] 内容类型: %@" , selectedContents ) ;
NSLog ( @ "[AIReportVC] 描述: %@" , description ) ;
// TODO : 调 用 举 报 接 口
[ KBHUD showSuccess : KBLocalized ( @ "Report submitted" ) ] ;
@@ -130,28 +390,147 @@
# pragma mark - Lazy Load
- ( UITable View * ) table View {
if ( ! _table View ) {
_table View = [ [ UITable View alloc ] initWithFrame : CGRectZero style : UITableViewStylePlain ] ;
_table View . backgroundColor = [ UIColor clearColor ] ;
_table View . separatorStyle = UITableViewCellSeparatorStyleNone ;
_tableView . delegate = self ;
_tableView . dataSource = self ;
[ _tableView registerClass : [ UITableViewCell class ] forCellReuseIdentifier : @ "ReportCell" ] ;
- ( UIScroll View * ) scroll View {
if ( ! _scroll View ) {
_scroll View = [ [ UIScroll View alloc ] init ] ;
_scroll View . showsVerticalScrollIndicator = NO ;
_scroll View . alwaysBounceVertical = YES ;
}
return _table View ;
return _scroll View ;
}
- ( UIView * ) contentView {
if ( ! _contentView ) {
_contentView = [ [ UIView alloc ] init ] ;
}
return _contentView ;
}
- ( UIView * ) reasonCardView {
if ( ! _reasonCardView ) {
_reasonCardView = [ [ UIView alloc ] init ] ;
_reasonCardView . backgroundColor = [ UIColor whiteColor ] ;
_reasonCardView . layer . cornerRadius = 12 ;
}
return _reasonCardView ;
}
- ( UILabel * ) reasonTitleLabel {
if ( ! _reasonTitleLabel ) {
_reasonTitleLabel = [ [ UILabel alloc ] init ] ;
_reasonTitleLabel . text = KBLocalized ( @ "Report reason" ) ;
_reasonTitleLabel . font = [ UIFont systemFontOfSize : 16 weight : UIFontWeightMedium ] ;
_reasonTitleLabel . textColor = [ UIColor colorWithRed : 0.1 green : 0.1 blue : 0.1 alpha : 1.0 ] ;
}
return _reasonTitleLabel ;
}
- ( UITableView * ) reasonTableView {
if ( ! _reasonTableView ) {
_reasonTableView = [ [ UITableView alloc ] initWithFrame : CGRectZero style : UITableViewStylePlain ] ;
_reasonTableView . backgroundColor = [ UIColor clearColor ] ;
_reasonTableView . separatorStyle = UITableViewCellSeparatorStyleNone ;
_reasonTableView . scrollEnabled = NO ;
_reasonTableView . delegate = self ;
_reasonTableView . dataSource = self ;
[ _reasonTableView registerClass : [ AIReportOptionCell class ] forCellReuseIdentifier : @ "AIReportOptionCell" ] ;
}
return _reasonTableView ;
}
- ( UIView * ) contentCardView {
if ( ! _contentCardView ) {
_contentCardView = [ [ UIView alloc ] init ] ;
_contentCardView . backgroundColor = [ UIColor whiteColor ] ;
_contentCardView . layer . cornerRadius = 12 ;
}
return _contentCardView ;
}
- ( UILabel * ) contentTitleLabel {
if ( ! _contentTitleLabel ) {
_contentTitleLabel = [ [ UILabel alloc ] init ] ;
_contentTitleLabel . text = KBLocalized ( @ "selection content" ) ;
_contentTitleLabel . font = [ UIFont systemFontOfSize : 16 weight : UIFontWeightMedium ] ;
_contentTitleLabel . textColor = [ UIColor colorWithRed : 0.1 green : 0.1 blue : 0.1 alpha : 1.0 ] ;
}
return _contentTitleLabel ;
}
- ( UITableView * ) contentTableView {
if ( ! _contentTableView ) {
_contentTableView = [ [ UITableView alloc ] initWithFrame : CGRectZero style : UITableViewStylePlain ] ;
_contentTableView . backgroundColor = [ UIColor clearColor ] ;
_contentTableView . separatorStyle = UITableViewCellSeparatorStyleNone ;
_contentTableView . scrollEnabled = NO ;
_contentTableView . delegate = self ;
_contentTableView . dataSource = self ;
[ _contentTableView registerClass : [ AIReportOptionCell class ] forCellReuseIdentifier : @ "AIReportOptionCell" ] ;
}
return _contentTableView ;
}
- ( UIView * ) descriptionCardView {
if ( ! _descriptionCardView ) {
_descriptionCardView = [ [ UIView alloc ] init ] ;
_descriptionCardView . backgroundColor = [ UIColor whiteColor ] ;
_descriptionCardView . layer . cornerRadius = 12 ;
}
return _descriptionCardView ;
}
- ( UILabel * ) descriptionTitleLabel {
if ( ! _descriptionTitleLabel ) {
_descriptionTitleLabel = [ [ UILabel alloc ] init ] ;
_descriptionTitleLabel . text = KBLocalized ( @ "Report description" ) ;
_descriptionTitleLabel . font = [ UIFont systemFontOfSize : 16 weight : UIFontWeightMedium ] ;
_descriptionTitleLabel . textColor = [ UIColor colorWithRed : 0.1 green : 0.1 blue : 0.1 alpha : 1.0 ] ;
}
return _descriptionTitleLabel ;
}
- ( UITextView * ) descriptionTextView {
if ( ! _descriptionTextView ) {
_descriptionTextView = [ [ UITextView alloc ] init ] ;
_descriptionTextView . font = [ UIFont systemFontOfSize : 14 ] ;
_descriptionTextView . textColor = [ UIColor colorWithRed : 0.2 green : 0.2 blue : 0.2 alpha : 1.0 ] ;
_descriptionTextView . backgroundColor = [ UIColor colorWithRed : 0.96 green : 0.96 blue : 0.96 alpha : 1.0 ] ;
_descriptionTextView . layer . cornerRadius = 8 ;
_descriptionTextView . delegate = self ;
_descriptionTextView . textContainerInset = UIEdgeInsetsMake ( 8 , 4 , 8 , 4 ) ;
}
return _descriptionTextView ;
}
- ( UILabel * ) placeholderLabel {
if ( ! _placeholderLabel ) {
_placeholderLabel = [ [ UILabel alloc ] init ] ;
_placeholderLabel . text = KBLocalized ( @ "Please describe the specific reason for your report." ) ;
_placeholderLabel . font = [ UIFont systemFontOfSize : 14 ] ;
_placeholderLabel . textColor = [ UIColor colorWithRed : 0.6 green : 0.6 blue : 0.6 alpha : 1.0 ] ;
_placeholderLabel . numberOfLines = 0 ;
}
return _placeholderLabel ;
}
- ( UILabel * ) countLabel {
if ( ! _countLabel ) {
_countLabel = [ [ UILabel alloc ] init ] ;
_countLabel . text = @ "0/200" ;
_countLabel . font = [ UIFont systemFontOfSize : 12 ] ;
_countLabel . textColor = [ UIColor colorWithRed : 0.6 green : 0.6 blue : 0.6 alpha : 1.0 ] ;
}
return _countLabel ;
}
- ( UIButton * ) submitButton {
if ( ! _submitButton ) {
_submitButton = [ UIButton buttonWithType : UIButtonTypeCustom ] ;
_submitButton . backgroundColor = [ UIColor colorWithRed : 0.8 green : 1.0 blue : 0.6 alpha : 1.0 ] ;
_submitButton . backgroundColor = [ UIColor colorWithRed : 0.0 green : 0.75 blue : 0.67 alpha : 1.0 ] ;
_submitButton . layer . cornerRadius = 25 ;
[ _submitButton setTitle : KBLocalized ( @ "Submit" ) forState : UIControlStateNormal ] ;
[ _submitButton setTitleColor : [ UIColor black Color] forState : UIControlStateNormal ] ;
[ _submitButton setTitleColor : [ UIColor white Color] forState : UIControlStateNormal ] ;
_submitButton . titleLabel . font = [ UIFont systemFontOfSize : 16 weight : UIFontWeightSemibold ] ;
_submitButton . enabled = NO ;
_submitButton . alpha = 0.5 ;
[ _submitButton addTarget : self action : @ selector ( submitButtonTapped ) forControlEvents : UIControlEventTouchUpInside ] ;
}
return _submitButton ;