第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何知道UITableView行號(hào)

如何知道UITableView行號(hào)

小怪獸愛(ài)吃肉 2019-07-05 13:39:57
如何知道UITableView行號(hào)我有一個(gè)UITableViewCell帶著UISwitch作為每個(gè)單元格的輔助視圖。當(dāng)我在單元格中更改開(kāi)關(guān)的值時(shí),如何知道開(kāi)關(guān)在哪一行?我需要切換值更改事件中的行號(hào)。
查看完整描述

3 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊

如果您設(shè)置tag屬性設(shè)置為行號(hào)(如其他答案所建議的),您必須在tableView:cellForRowAtIndexPath:(因?yàn)榭梢詫?duì)不同的行重用單元格)。

相反,當(dāng)您需要行號(hào)時(shí),您可以沿著superview鏈子UISwitch(或任何其他視圖)UITableViewCell,然后到UITableView,并詢(xún)問(wèn)單元格的索引路徑的表視圖:

static NSIndexPath *indexPathForView(UIView *view) {
    while (view && ![view isKindOfClass:[UITableViewCell class]])
        view = view.superview;
    if (!view)
        return nil;
    UITableViewCell *cell = (UITableViewCell *)view;
    while (view && ![view isKindOfClass:[UITableView class]])
        view = view.superview;
    if (!view)
        return nil;
    UITableView *tableView = (UITableView *)view;
    return [tableView indexPathForCell:cell];}

這不需要在tableView:cellForRowAtIndexPath:.


查看完整回答
反對(duì) 回復(fù) 2019-07-05
?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

接受的解決方案是一種聰明的攻擊。

但是,如果我們可以利用已經(jīng)可用的,為什么我們需要使用hitpoint呢?tag財(cái)產(chǎn)上UIView?你會(huì)說(shuō)標(biāo)記只能存儲(chǔ)行或節(jié)。因?yàn)樗菃吻?/trans>INT.

好吧.。別忘了你的根人(CS 101)。單曲INT可以存儲(chǔ)兩個(gè)兩倍小的整數(shù)。這里有一個(gè)擴(kuò)展:

extension Int {

    public init(indexPath: IndexPath) {
        var marshalledInt: UInt32 = 0xffffffff

        let rowPiece = UInt16(indexPath.row)
        let sectionPiece = UInt16(indexPath.section)
        marshalledInt = marshalledInt & (UInt32(rowPiece) << 16)
        marshalledInt = marshalledInt + UInt32(sectionPiece)

        self.init(bitPattern: UInt(marshalledInt))
    }

    var indexPathRepresentation: IndexPath {
        let section = self & 0x0000ffff

        let pattern: UInt32 = 0xffff0000
        let row = (UInt32(self) & pattern) >> 16
        return IndexPath(row: Int(row), section: Int(section))
    }}

在你的tableView(_:, cellForRowAt:)然后你可以:

cell.yourSwitch.tag = Int(indexPath: indexPath)

然后在操作處理程序中可以:

func didToogle(sender: UISwitch){
    print(sender.tag.indexPathRepresentation)}

不過(guò),請(qǐng)注意它的局限性:行和區(qū)段不需要大于65535。(UInt 16.max)

我懷疑你的tableView的指數(shù)會(huì)那么高,但如果它們是這樣的話,挑戰(zhàn)你自己,并實(shí)施更有效的包裝方案。假設(shè)我們有一個(gè)很小的部分,我們不需要所有的16位來(lái)表示一個(gè)節(jié)。我們的int布局如下:

{section area length}{all remaining}[4 BITS: section area length - 1]

那是我們的4LSBs指定區(qū)段區(qū)域-1的長(zhǎng)度,因?yàn)槲覀冎辽贋橐粋€(gè)區(qū)段分配了1位。因此,在我們的部分為0的情況下,行最多可以占用27位([1][27][4]),這絕對(duì)是足夠的。


查看完整回答
反對(duì) 回復(fù) 2019-07-05
  • 3 回答
  • 0 關(guān)注
  • 521 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)