商品選擇控件

在項(xiàng)目中寫這個(gè)控件的時(shí)候,細(xì)節(jié)還是很多的,比如如何根據(jù)后臺(tái)傳過來(lái)的json來(lái)布局里面的子控件。

1.先來(lái)看看效果圖

DB931AEF-935F-426E-95D5-5D3D402EC88F.png

2.看下控件的視圖層級(jí)

05EFFA2C-3A44-4811-A765-9E6863E471F3.png

3.計(jì)算標(biāo)簽的核心代碼

'''

[self.tagButtons removeAllObjects];
for (int i = 0; i< items.count; i++) {
    UIButton *tagButton = [[UIButton alloc] init];
    [self.tagButtons addObject:tagButton];
    tagButton.backgroundColor = grayBgColor;
    tagButton.layer.cornerRadius = MXMargin;
    [tagButton setTitle:items[i] forState:UIControlStateNormal];
    tagButton.titleLabel.font = MXFont;
    // 應(yīng)該要先設(shè)置文字和字體后,再進(jìn)行計(jì)算
    [tagButton sizeToFit];
    tagButton.mx_width += 2 * MXTagMargin;
    tagButton.mx_height = shopTageButtonH;
    
    [tagButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    [tagButton setTitleColor:[UIColor whiteColor] forState:UIControlStateDisabled];
    [self.btnView addSubview:tagButton];
    //添加點(diǎn)擊事件
    [tagButton addTarget:self action:@selector(tagButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
    
    // 設(shè)置位置
    if (i == 0) { // 最前面的標(biāo)簽
        tagButton.mx_x = 0;
        tagButton.mx_y = 0;
    } else { // 其他標(biāo)簽
        UIButton *lastTagButton = self.tagButtons[i - 1];
        // 計(jì)算當(dāng)前行左邊的寬度
        CGFloat leftWidth = CGRectGetMaxX(lastTagButton.frame) + MXTagMargin;
        // 計(jì)算當(dāng)前行右邊的寬度
        CGFloat rightWidth = self.btnView.mx_width - leftWidth;
        if (rightWidth >= tagButton.mx_width) { // 按鈕顯示在當(dāng)前行
            tagButton.mx_y = lastTagButton.mx_y;
            tagButton.mx_x = leftWidth;
        } else { // 按鈕顯示在下一行
            tagButton.mx_x = 0;
            tagButton.mx_y = CGRectGetMaxY(lastTagButton.frame) + MXTagMargin;
        }
    }
}
// 最后一個(gè)標(biāo)簽
UIButton *lastTagButton = [self.tagButtons lastObject];

CGFloat h =  CGRectGetMaxY(lastTagButton.frame);

//更新Frame
self.btnView.mx_height = h;

self.mx_height = h + 8 * MXMargin;

self.sepLineView.mx_y = self.mx_height - seprLineH;

'''

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,552評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,255評(píng)論 4 61
  • 午夜的茉莉花 清芬的香氣浸入微涼的空氣中 漸漸漫延開來(lái) 沾上了微雨濺下的滴露 房間內(nèi) 一張桌子 一盞燈 惹了思念成...
    潁阿閱讀 268評(píng)論 7 11
  • 文件系統(tǒng)層:在這一層里,分布式文件系統(tǒng)需具備存儲(chǔ)管理、容錯(cuò)處理、高可擴(kuò)展性、高可靠性和高可用性等特性。數(shù)據(jù)存儲(chǔ)層:...
    zjlearn閱讀 1,133評(píng)論 0 1