2010-07-01 4 views
11

Mögliche Duplizieren:
iPad: detect if external keyboard is presentWie erkenne ich, dass eine Hardwaretastatur an ein iPhone angeschlossen ist?

Ich habe um in der Referenzbibliothek zu graben und kann einfach nicht scheinen hier die Antwort zu finden.

Ich gehe davon aus, dass es irgendwo eine API gibt, die ich abfragen kann, um herauszufinden, ob eine externe Hardware-Tastatur verwendet wird oder nicht.

aktualisieren Ich habe gerade versucht die EAAccessoryManager.connectedAccessories vom ExternalAccessory.framework. Das war ein No-Go, es gibt ein leeres Array zurück, wenn die Hardware-Tastatur aktiviert ist.

+0

Nur neugierig: Warum brauchen Sie diese Informationen? – Eiko

+0

Wenn die Hardwaretastatur aktiviert ist, wird die Bildschirmtastatur nicht mehr angezeigt. Wir fügen einen Datapicker als Unteransicht über die Tastatur für ein Textfeld hinzu, das ein Datum verwendet. Dies ist eine Art Hack aufgrund der Verwendung der Three20 TTMessageController-Infrastruktur, die nur UITextFields als Felder in einer Nachricht zulässt. Wenn der Benutzer unser Textfeld "Datum" berührt, finden wir die Tastatur und überlagern stattdessen den UIDatePicker. – user174448

+0

Ermitteln, ob er die Größe der virtuellen Tastaturen berücksichtigen muss, wenn er für eine Eingabe scrollt. – jamone

Antwort

1

Ich glaube, Sie folgenden Code verwenden -

- (void)viewDidLoad { 
    UIView* _noExternalAccessoriesPosterView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    [_noExternalAccessoriesPosterView setBackgroundColor:[UIColor whiteColor]]; 
    _noExternalAccessoriesLabelView = [[UILabel alloc] initWithFrame:CGRectMake(60, 170, 240, 50)]; 
    [_noExternalAccessoriesLabelView setText:@"No Accessories Connected"]; 
    [_noExternalAccessoriesPosterView addSubview:_noExternalAccessoriesLabelView]; 
    [[self view] addSubview:_noExternalAccessoriesPosterView]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil]; 
    [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; 

    _eaSessionController = [EADSessionController sharedController]; 
    _accessoryList = [[NSMutableArray alloc] initWithArray:[[EAAccessoryManager sharedAccessoryManager] connectedAccessories]]; 

    [self setTitle:@"Accessories"]; 

    if ([_accessoryList count] == 0) { 
     [_noExternalAccessoriesPosterView setHidden:NO]; 
    } else { 
     [_noExternalAccessoriesPosterView setHidden:YES]; 
    } 
} 

- (void)_accessoryDidConnect:(NSNotification *)notification { 
    EAAccessory *connectedAccessory = [[notification userInfo] objectForKey:EAAccessoryKey]; 
    [_accessoryList addObject:connectedAccessory]; 

    if ([_accessoryList count] == 0) { 
     [_noExternalAccessoriesPosterView setHidden:NO]; 
    } else { 
     [_noExternalAccessoriesPosterView setHidden:YES]; 
    } 

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:([_accessoryList count] - 1) inSection:0]; 
    [[self tableView] insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationLeft]; 
} 

Hope this für Sie und erinnern Sie sich ExternalAccessory Rahmen für diesen Code verwenden.

+0

Xcode wird nach dem Hinzufügen von ExternalAccessory.framework verrückt. – Dmitry

Verwandte Themen