ios - 打開自定義 UITableViewCell 時在溢出菜單中顯示/隱藏輔助功能元素
我正在自定義 UITableViewCell 類中實現(xiàn)輔助功能嘹裂。我有一個相當簡單的溢出菜單妄壶,里面有幾個按鈕,這些按鈕是隱藏的寄狼,直到按下一個省略號按鈕滑動打開并關閉溢出丁寄。
在我的單元格初始化程序中,我將 overflowContainer 的 accessibilityElementsHidden 設置為 YES。這似乎有效伊磺,當使用 VoiceOver 滾動瀏覽時盛正,這些 View 將被跳過。
然后屑埋,當打開單元格時豪筝,在 UIView 動畫的完成處理程序中,我將同一 overflowContainer 的相同 accessibilityElementsHidden 設置為不摘能。這似乎沒有任何效果壤蚜,那些元素仍然被跳過。
我也嘗試過在更改 accessibilityElementsHidden BOOL 之前/之后/之后發(fā)布 UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil)徊哑,但這也會出現(xiàn)對情況沒有影響袜刷。
基本上,我想在特定點對幾個 UIView 實例切換 accessibilityElementsHidden莺丑。誰能告訴我我可能做錯了什么著蟹?
這是我在溢出打開時觸發(fā)的代碼:
- (void)cellOverflowDidShow:(MyCell *)cell
{
self.overflowContainer.isAccessibilityElement = YES;
self.firstButton.isAccessibilityElement = YES;
self.secondButton.isAccessibilityElement = YES;
self.thirdButton.isAccessibilityElement = YES;
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, self.firstButton);
}
我在關閉單元格時觸發(fā)相反的操作(將所有設置為 NO 并再次發(fā)布通知)。在初始化單元格時梢莽,我設置的是:
self.overflowContainer.isAccessibilityElement = NO;
完全不知道為什么它不應該工作萧豆,看來我做的一切都是 100% 正確的。如果我不在初始化程序中設置該行昏名,按鈕將全部顯示為可訪問(始終)涮雷。因此,第一個調用(無論是 YES 還是 NO)似乎都有效轻局,但任何后續(xù)調用都將被忽略洪鸭。
最佳答案
在可見狀態(tài)下,您將溢出容器聲明為可訪問性元素仑扑。因此览爵,VoiceOver 將允許用戶聚焦它而不是導航子元素。不要切換它是否是輔助功能元素镇饮,而是將 self.overflowContainer.isAccessibilityElement 設置為 NO 并切換其子元素 firstButton蜓竹、secondButton 和 thirdButton 的輔助功能。
設置子元素可訪問性的簡寫是accessibilityElementsHidden储藐。嘗試在 View 出現(xiàn)時將 self.overflowContainer.accessibilityElementsHidden 設置為 NO俱济,在 View 消失時將其設置為 YES。
無論如何钙勃,您可能仍然需要觸發(fā)布局更改通知蛛碌。
objective-c - Objective-C - ARC、內(nèi)存管理和 performSelectorInBackground肺缕?
ARC 是否不再需要在后臺線程中調用的方法上使用 @autoreleasepool
左医?除非 doStuff 用@autorelease 池包裝授帕,否則以下代碼假設會導致內(nèi)存泄漏,但是當我運行儀器時浮梢,它顯示用戶已分配并在運行循環(huán)結束時被釋放跛十。
- (IBAction)buttonClicked:(id)sender {
[self performSelectorInBackground:@selector(doStuff) withObject:nil];
}
- (void)doStuff {
User *user = [[User alloc] init];
NSLog(@"%@", user);
}
最佳答案
雖然在 NSThread 的實現(xiàn)中可能暗示存在一個自動釋放池,但文檔中沒有這樣的保證秕硝。相反芥映,文檔明確指出:
performSelectorInBackground:withObject:
The method represented by aSelector must set up the thread environment just as you would for any other new thread in your program.
Threading Programming Guide
If your application uses the managed memory model [MRC and ARC, as opposed to Garbage Collection], creating an autorelease pool should be the first thing you do in your thread entry routine.
結論:雖然在某些特定情況下可能存在自動釋放池,但不建議依賴這一事實远豺。這是未記錄的行為奈偏,可能會隨著操作系統(tǒng)的每次發(fā)布或其他情況而改變。通常應避免在運輸代碼中使用躯护。
iphone - 如何檢查 NSMutableArray 是否包含值(null)惊来?
我有一個 NSMutableArray 實例,其中包含“N”個對象棺滞,我想檢查 NSMutableArray 是否包含(null)或任何其他值裁蚁。
在 NSString 中有一個名為 isEqualToString: 的方法 NSMutableArray 是否有類似的方法?
否則继准,我該怎么做枉证?
最佳答案
NSMutableArray 只能包含非nil 對象。打印為 (null) 的對象通常為 nil移必。
父類(super class)方法 containsObject: 會告訴您特定的非 nil 對象是否在數(shù)組中室谚。請注意,這僅在根據(jù) isEqual: 對象相同時才有效崔泵。