UIButton 如何變相獲取 titleLabel.frame.size

Keywords: UIButton, titleLabel, imageView, frame, bounds, size, width

如果你讀過 [iOS]調(diào)整UIButton的title和image詳解 - 簡(jiǎn)書stackOverFlow 上的這篇 坛芽,會(huì)發(fā)現(xiàn)獲取一個(gè) size 屬性是個(gè)多大的坑……因?yàn)樽?iOS8 起留储,一個(gè) UIButton 內(nèi)部的 titleLabel / imageView 的 frame / bounds 只有等這個(gè)按鈕完成了自己的初始化后才會(huì)生成(據(jù)我推測(cè)~)。

因此咙轩,iOSers 發(fā)明了許多詭異的獲取 size 的方法获讳。比如提前[self setNeedsLayout]; [self layoutIfNeeded];,或者提前調(diào)用一下 titleLabel / imageView 的屬性活喊,或者將獲取 size 放入 dispatch_async(dispatch_get_main_queue()...中丐膝。這些我統(tǒng)統(tǒng)試過,然而都不好用钾菊。

那怎么獲取呢帅矗?答案是:[titleLable.text sizeWithAttributes: userAttributes].width

PS: 已經(jīng)加載按鈕后煞烫,要根據(jù)文字變化浑此,動(dòng)態(tài)改變按鈕的 frame 要重新加載按鈕……很麻煩。


篇二:控件如何綁定類方法滞详?

keywords: class method, UIButton, 按鈕, addTarget, action

[xxxTextField addTarget:[SomeClass class]
                      action:@selector(method)
            forControlEvents:UIControlEventXxx];

篇三:如何在 UITextField 的委托方法中重設(shè)一個(gè)復(fù)雜的占位符(placeholder)

按:需求合理而實(shí)現(xiàn)詭異的情況總是層出不窮……

Q1: 什么樣的合理需求凛俱?
A1: 用戶點(diǎn)擊輸入框,占位符消失料饥。若 TA 離開時(shí)沒有輸入任何文本蒲犬,則占位符得重新變回來(lái)。

Q2: 什么叫復(fù)雜的占位符岸啡?
A2: 包括但不限于:與「輸入時(shí)」(Editing Time?) 不同的對(duì)齊方式原叮,由 NSAttributedString 創(chuàng)建,同時(shí)根據(jù)不同機(jī)型還做了字號(hào)縮放之類的適配……

栗子(兼解決方案):

- (void)setMonthTextFieldPlaceholder:(UITextField *)tf {
  
  if ((is4S || is5S) && (isEN || isTh)) {// Thailand
    tf.textAlignment = NSTextAlignmentCenter;
    tf.attributedPlaceholder =
    [[NSAttributedString alloc] initWithString:NSLocalizedString(@"card_month", nil)
                                    attributes:@{
                                                 NSFontAttributeName : [UIFont systemFontOfSize:contentFontSize - 1]
                                                 }
     ];
  } else {
      tf.placeholder = NSLocalizedString(@"card_month", nil);
      tf.textAlignment = NSTextAlignmentRight;
    }

解釋:在 View 中創(chuàng)建 textField 時(shí)巡蘸,就把設(shè)置占位符的部分單獨(dú)用一個(gè)函數(shù)來(lái)寫篇裁。(由于指針的關(guān)系,對(duì)形參的操作可直接影響實(shí)參~)再把這個(gè)設(shè)置方法暴露在頭文件里赡若。

使用:比如在委托方法- (void)textFieldDidEndEditing:(UITextField *)textField 你就可以通過:

if (!textField.text.length) {
  [someView setMonthTextFieldPlaceholder:textField];
}

來(lái)輕松重設(shè)一個(gè)「復(fù)雜的」占位符了~


PS: 實(shí)際的需求其實(shí)更麻煩达布,某些語(yǔ)言占位符要居右,而開始輸入時(shí)要居中逾冬。然而只要占位符在黍聂,那么光標(biāo)要么居左要么居右躺苦,設(shè)置居中是不行的,所以要提前把 palceholder = nil产还。
如果之后用戶沒輸入匹厘,再調(diào)用 setPlaceholder 方法……

PS2: shouldChangeCharactersInRange:(NSRange)range 是有坑的,原理我也不清楚脐区。具體情況是:從空 textField 輸入時(shí)的 range.location 與 編輯一個(gè)已有內(nèi)容的 textField(比如從父界面?zhèn)骰亓艘恍?shù)據(jù))時(shí)的 range.location 差了一位(內(nèi)容統(tǒng)一長(zhǎng)度的話)愈诚。有的 location 起始是這樣的:nil, 2, 3,有的是 nil, 1, 2...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牛隅,一起剝皮案震驚了整個(gè)濱河市炕柔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌媒佣,老刑警劉巖匕累,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異默伍,居然都是意外死亡欢嘿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門也糊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)炼蹦,“玉大人,你說(shuō)我怎么就攤上這事狸剃】虺冢” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵捕捂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我斗搞,道長(zhǎng)指攒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任僻焚,我火速辦了婚禮允悦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘虑啤。我一直安慰自己隙弛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布狞山。 她就那樣靜靜地躺著全闷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萍启。 梳的紋絲不亂的頭發(fā)上总珠,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天屏鳍,我揣著相機(jī)與錄音笛匙,去河邊找鬼肚邢。 笑死搔预,一個(gè)胖子當(dāng)著我的面吹牛顷歌,可吹牛的內(nèi)容都是我干的笨触。 我是一名探鬼主播音诈,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼伺通,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼必怜!你這毒婦竟也來(lái)了唆迁?” 一聲冷哼從身側(cè)響起鸭丛,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎媒惕,沒想到半個(gè)月后系吩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妒蔚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年穿挨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肴盏。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡科盛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菜皂,到底是詐尸還是另有隱情贞绵,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布恍飘,位于F島的核電站榨崩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏章母。R本人自食惡果不足惜母蛛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望乳怎。 院中可真熱鬧彩郊,春花似錦、人聲如沸蚪缀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)询枚。三九已至违帆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間金蜀,已是汗流浹背前方。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工狈醉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惠险。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓苗傅,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親班巩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子渣慕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • *7月8日上午 N:Block :跟一個(gè)函數(shù)塊差不多,會(huì)對(duì)里面所有的內(nèi)容的引用計(jì)數(shù)+1抱慌,想要解決就用__block...
    炙冰閱讀 2,477評(píng)論 1 14
  • 1,Search Bar 怎樣去掉背景的顏色(storyboard里只能設(shè)置background顏色逊桦,可是發(fā)現(xiàn)cl...
    以德扶人閱讀 2,333評(píng)論 2 50
  • 打印View所有子視圖 layoutSubviews調(diào)用的調(diào)用時(shí)機(jī) 當(dāng)視圖第一次顯示的時(shí)候會(huì)被調(diào)用當(dāng)這個(gè)視圖顯示到...
    hyeeyh閱讀 501評(píng)論 0 3
  • 各位童鞋們, UIButton是iOS中常用的控件,下面來(lái)詳細(xì)介紹它的使用方法和以及開發(fā)中需要注意的問題. UIB...
    我與太陽(yáng)肩并肩閱讀 1,279評(píng)論 2 17
  • 一六年是學(xué)習(xí)成長(zhǎng)的一年,在這一年發(fā)生了很多事抑进,讓我更清楚的認(rèn)識(shí)了自己强经,也讓我開始冷靜,開始學(xué)習(xí)寺渗,開始去關(guān)注一些自己...
    倪子妮閱讀 151評(píng)論 0 0