解决TalbleView头部或底部子控件不显示问题

在自定义cell头部控件UITableViewHeaderFooterView(和自定义cell的方法几乎一样)时,出现了头部控件子控件不显示的问题。

注意和自定义cell的区别。

.h文件

 1 #import <UIKit/UIKit.h>
 2 #import "CHModleGroup.h"
 3 @interface HeaderView : UITableViewHeaderFooterView
 4 @property (nonatomic, weak) UILabel *count;
 5 @property (nonatomic, weak) UIButton *name;
 6 + (instancetype)headerViewWithTableView:(UITableView *)tableView;
 7
 8 @property (nonatomic, strong) CHModleGroup *group;
 9
10 @end

.m文件

 1 #import "HeaderView.h"
 2
 3 @implementation HeaderView
 4 + (instancetype)headerViewWithTableView:(UITableView *)tableView{
 5     static NSString *ID = @"header";
 6     HeaderView *header = [tableView dequeueReusableHeaderFooterViewWithIdentifier:ID];
 7     if (header == nil) {
 8         header = [[HeaderView alloc]initWithReuseIdentifier:ID];
 9     }
10     return header;
11 }
12
13 - (id)initWithReuseIdentifier:(NSString *)reuseIdentifier
14 {
15     if (self = [super initWithReuseIdentifier:reuseIdentifier]) {
16         UIButton *nameView = [UIButton buttonWithType:UIButtonTypeCustom];
17         // 背景图片
18         [nameView setBackgroundImage:[UIImage imageNamed:@"发布新闻背景副本"] forState:UIControlStateNormal];
19         [nameView setBackgroundImage:[UIImage imageNamed:@"welcome3"] forState:UIControlStateHighlighted];
20         // 设置按钮内部的左边箭头图片
21         [nameView setImage:[UIImage imageNamed:@"buddy_header_arrow副本"] forState:UIControlStateNormal];
22         [nameView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
23         // 设置按钮的内容左对齐
24         nameView.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
25         // 设置按钮的内边距
26         //        nameView.imageEdgeInsets
27         nameView.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
28         nameView.contentEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);
29         [self.contentView addSubview:nameView];
30         self.nameView = nameView;
31
32
33
34         // 2.添加好友数
35         UILabel *countView = [[UILabel alloc] init];
36         countView.textAlignment = NSTextAlignmentRight;
37         countView.textColor = [UIColor grayColor];
38         [self.contentView addSubview:countView];
39         self.countView = countView;
40
41
42     }
43         return self;
44     }
45
46 /**
47  *  当一个控件的frame发生改变的时候就会调用
48  *
49  *  一般在这里布局内部的子控件(设置子控件的frame)
50  */
51 - (void)layoutSubviews
52 {
53     //一定要调用super的方法
54     [super layoutSubviews];
55
56     // 1.设置按钮的frame
57     self.nameView.frame = self.bounds;
58
59     // 2.设置数的frame
60     CGFloat countY = 0;
61     CGFloat countH = self.frame.size.height;
62     CGFloat countW = 150;
63     CGFloat countX = self.frame.size.width - 10 - countW;
64     self.countView.frame = CGRectMake(countX, countY, countW, countH);
65 }
66
67 //设置数据
68 - (void)setGroup:(MJFriendGroup *)group
69 {
70     _group = group;
71
72     // 1.设置按钮文字(组名)
73     [self.name setTitle:group.name forState:UIControlStateNormal];
74
75     // 2.设置数量(总数)
76     self.count.text = [NSString stringWithFormat:@"%lu", friends.count];
77 }
78
79
80 @end
时间: 2024-08-06 11:57:13

解决TalbleView头部或底部子控件不显示问题的相关文章

Android自定义组合控件内子控件无法显示问题

今天自定义了一个组合控件,与到了个奇葩问题: 我自定义了一个RelativeLayout,这个layout内有多个子控件.但奇怪的是这些子控件一直显示不出来.调试了一下午,竟然是因为在获取(inflate)布局时没有添加到Root.

Android嵌套滑动控件的冲突解决和ViewPager适配当前子控件高度不留空白的办法

最近项目有一个需求,需要多层可滑动控件的嵌套展示,demo效果如下,demo的下载地址在最后 咋一看好像挺简单啊,不就是一个ScrollView + ViewPager + ListView吗,我开始也这样觉得,也用的这种方式实现,结果始终和效果不对劲.这里总结几点问题: 两个或两个以上的滑动控件嵌套时,如果layout_height采用的是wrap_content会造成内部滑动控件的高度不能正确的计算,会导致内部滑动控件的高度始终为0,除非你用定值设置,比如300dp. 两个相同滑动方向的滑动

解决ListView中Item的子控件与Item点击事件冲突

经常会碰到在ListView中点击其中一个Item,会一并触发其子控件的点击事件,例如Item中的Button.ImageButton等,导致了点击Item中Button以外区域也会触发Button点击事件.在网上找了相关方法,这里记录下,亲测可行.. 1.在Item的xml文件根元素中添加属性:android:descendantFocusability="blocksDescendants" 2.在冲突的子控件中添加属性:android:focusable="false&

终于懂了:FWinControls子控件的显示是由Windows来管理,而不是由Delphi来管理

在研究TCustomControl的显示过程中,怎么样都找不到刷新FWinControls并重新显示的代码: procedure TWinControl.PaintHandler(var Message: TWMPaint); var I, Clip, SaveIndex: Integer; DC: HDC; PS: TPaintStruct; begin DC := Message.DC; if DC = 0 then DC := BeginPaint(Handle, PS); try if

记录下UIButton的图文妙用和子控件的优先显示

UIButton的用处特别多,这里只记录下把按钮应用在图文显示的场景,和需要把图片作为按钮的背景图片显示场景: 另外记录下在父控件的子控件优先显示方法(控件置于最前面和置于最后面). 先上效果图: 1.当在某个地方既需要显示图片,还需要显示文字,另外还要有点击功能的时候,这时按钮是个很好的选择. 按钮中的图片和文字的距离可以自由调整,图片的也可以上下左右翻转.日常项目中像这些场景都是很容易碰到的. 按钮图文设置.图文位置移动.按钮中图片翻转示例代码: /** 测试图文并茂的按钮,图文移动 */

记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。

前三天收到位网友的私信求助,问题大概如标题所示.具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见.不想看前奏的请直接跳至解决方法. 问题原型: 父控件是自定义的 LinearLayout,目的是实现下拉刷新,这个自定义View的实现下拉操作思想是通过检测 onTouch 事件,然后,子控件有一个 scrollView,它是完全为了实现下滚和滚到底部实现加载更多的监听.看到这,我相信任何一个有类似项目开发经验的人,都会感到很熟悉的.下拉刷新+下滑加载更多. 在 scrollV

ListView中的Item点击事件和子控件的冲突或者item点击没有反应的解决办法

fragment中添加了button和checkbox这些控件,此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应. 这时候就可以使用descendantFocusability来解决啦,API描述如下: android:descendantFocusability 该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系. 属性的值有三种: beforeDescendants:viewgroup会优先其子类控件而获取到焦点

listView 解决焦点冲突问题 item项和子控件之间的冲突

listView 在item布局的顶级布局中设置 android:descendantFocusability="blocksDescendants"可以阻止子控件获取焦点 这样使item项可以点击 这时其中的图片控件还是可以点击的当不想让item能点击时 可以不加上边的设置 并且将焦点转移到子控件 focusable属性 <TextView android:id="@+id/recommend_album_more" android:layout_width

关于ListView中item与子控件抢夺焦点的解决方法

1.在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button或者是CheckBox等控件以及其子类控件的时候,经常会碰到各种控件的点击事件冲突的情况,那么我们如何来处理Listview中这种控件之间焦点冲突的情况呢? 这里有三种解决方案 1.将ListView中的Item布局中的子控件focusable属性设置为false2.在getView方法中设置but