开发中遇到的问题小记

本文介绍了UITableView Cell布局中常见的问题及解决方案,包括使用确定宽度来避免布局错乱、提高代码复用性和降低耦合度的方法,以及如何实现Cell内Label点击响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 问题一
表现方面:自己布局的时候用tableview中的cell的宽度来确定其他控件的坐标,结果发现出现了问题第一次进入的时候布局是错乱的,第二次发现坐标布局是正确的。
解决方法:把控件的坐标判断用确定的宽度来写。比如说tableView的宽度。还有屏幕的宽度以及其他确定的宽度。
产生的原因:
2.问题二
技术点解析:今天在写项目的时候把cell的渲染写在cell里。没有写到控制器里。这样写的好处是提高了代码的复用。并且降低了代码间的耦合度。高内聚低耦合。比如说
在cell的.h里面写。
+ (RyxCommentListViewCell *)renderCommentListCell:(UITableView *)tableView cellForRow:(NSInteger)row dataSoueceElement :(id)dataSourceElement;
+ (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath dataSoueceElement:(id)dataSourceElement cell:(RyxCommentListViewCell *)cell;
在.m里面进行
+ (UITableViewCell *)renderCommentListCell:(UITableView *)tableView cellForRow:(NSInteger)row dataSoueceElement:(id)dataSourceElement {
    RyxCommentListViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:@"commentListCell"];
    cell.
dataSourceElement = dataSourceElement;
   
RyxCommentOC *commentOC = (RyxCommentOC *)dataSourceElement[row];
    [[cell thunmbnailImageView] setImage:[[RyxSharedStoragesharedStorage]launchScreenImage]];
    [[cell thunmbNameLabel]setText:[[commentOCowner]name]];
   
NSString *timeStamp = [RyxTimeStampgetTimeIndicateCreateAt:[commentOCtimestamp]];
    [[cell
timeStampLabel]setText:timeStamp];
    [[cell
commentContentLabel]setText:[commentOCcontent]];
   
return cell;
}
// 这个方法主要目的是为了自适应高度。
+ (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath dataSoueceElement:(id)dataSourceElement cell:(RyxCommentListViewCell *)cell {
     cell.
dataSourceElement = dataSourceElement;
    
RyxCommentOC *commentOC = (RyxCommentOC *)dataSourceElement[indexPath.row];
     [[cell
commentContentLabel]setText:[commentOCcontent]];
     [cell
sizeToFit];
     [cell
setNeedsLayout];
   
CGFloat height = [cellsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
   
return height + 1;
}

3.问题三:
今天遇到一个问题就是cell里面有两个label 对cell渲染是在cell类里面的并没有在view controller里渲染。点击cell中的label想要响应一个方法  采用以下的方法 来解决
publicextensionUIView {
    publicfunc viewController() ->UIViewController? {
       
let vcc =UIViewController.self
       
var responder:UIResponder? =self
       
while responder !=nil  {
           
if (responder?.isKindOfClass(vcc) != nil) {
               
return responderas?UIViewController
            }
            responder = responder?.
nextResponder()
        }
       
returnnil
    }
}
通过这个view找到他的响应者view controller 然后可以通过这个view controller来进行跳转。

4. 问题四:
   自己在写代理方法的时候出现警告:Assigning to 'id<xxxProtocol> from  incompatible type 'ViewController *const __strong'
这个错误自己不应该犯了,原因是自己写了代理可是没有遵循这个代理。加上代理实现代理方法就ok了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值