2014-07-14 48 views
3

我已經在UITableView中實現了內嵌的UIDatePicker,就像它們在其他iOS應用中顯示的一樣,例如在Calendar中創建新事件時。如何防止VoiceOver與隱藏的UIDatePicker進行交互

在VoiceOver中使用該應用程序時,在用戶選擇日期後仍然可以訪問日期選擇器,然後在表格視圖單元格上雙擊時關閉日期選擇器。當日期選擇器隱藏時,VoiceOver將突出顯示相應的單元格,但如果用戶向右滑動,則會選擇現在隱藏的UIDatePicker並允許它們與其交互。我期望它能像在日曆中一樣選擇下一個表格視圖單元格。

我看了其他做題中隱藏的觀點仍然可以訪問,並且爲了防止這種情況發生,你可以在酒店accessibilityElementsHidden在容器視圖中,隱藏元素,讓VoiceOver會後設置爲YES知道這是沒有在屏幕上更長。但這不適合我。我也讀過你應該發佈佈局更改通知,以便VoiceOver知道要更新到當前的用戶界面,但這也不起作用,隱藏的視圖仍然可以訪問。

如何防止我的隱藏UIDatePicker無法訪問?請注意,當表格加載時,隱藏日期選取器無法訪問。所以只有在它出現後,隱藏它仍然可以訪問。

這是我的代碼隱藏日期選擇器當用戶點擊單元格:

self.datePicker.hidden = YES; 
self.datePicker.alpha = 0.0f; 
self.datePickerCell.accessibilityElementsHidden = YES; 
self.datePickerCell.contentView.accessibilityElementsHidden = YES; 
UIAccessibilityPostNotification(UIAccessibilityLayoutChangedNotification, nil); 

而且在heightForRowAtIndexPathdatePickerCell高度時隱藏變爲0。請注意,datePickerdatePickerCellsubview

enter image description here

+0

你是什麼意思的「**,但如果用戶然後滑向右邊**」?此操作是否打開另一個窗口(如在導航控制器中 - 彈出當前窗口)? –

+0

@AleksandrMedvedev不,使用VoiceOver激活滑動將突出顯示切換到下一個元素。 – Joey

+0

你使用靜態或動態tableview嗎? –

回答

0

我試圖複製我自己的情況,並與一些具有輔助功能效果很好走了過來。在我看來,最重要的決定是使用一個NSLayoutConstraint作爲Date Picker的高度。

這是故事板,我設計的概述:

Static Tableview Storyboard

而這就是我在做的ViewController:

@IBOutlet weak var pickerHeightConstraint: NSLayoutConstraint! 
var showPicker = false 
@IBOutlet weak var datePickerView: UIDatePicker! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    pickerHeightConstraint.constant = 0 
} 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if indexPath.row == 0 { 
     showPicker = !showPicker 
     datePickerView.alpha = showPicker ? 1.0 : 0.0 
     pickerHeightConstraint.constant = showPicker ? 224 : 0 
     tableView.beginUpdates() 
     tableView.endUpdates() 
    } 
} 

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.row == 1 { 
     return pickerHeightConstraint.constant 
    } 
    return UITableViewAutomaticDimension 
} 

請注意,我並沒有浪費時間具有UIAccessibility屬性,如accessibilityElementsHidden。只需使用Layout Constraint的常數屬性來操作日期選取器視圖元素。

你可以找到一個項目,我測試了這個here。在自述文件中可以找到Gif,這樣您就可以快速看到一個簡短的演示 - 我的聲望不足以支持更多鏈接。

0
self.datePicker.isAccessibilityElement = FALSE; 

應該從輔助隱藏它。

+0

不幸的是,這並沒有訣竅 - 仍然可以訪問。 – Joey

-1

刪除日期選擇器或使用其他細胞沒有日期選擇器

-1

我建議你檢查一個變量訪問,因此:

@property(nonatomic,assign) BOOL isAccessible; 

和viewDidLoad中設置屬性來訪問= NO;

self.isAccessible = NO; 

UITableViewDelegate

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath 
{ 
    if(self.isAccessible) 
    { 
     //Do your date picker functionality 
    } 
    //For else u dont need cuz it will do no function if isAccessible is set to NO; 
}