2014-11-10 12 views
8

Ich versuche, diese Anleitung zu folgen, aber mit schnellen: InputAccessoryView docked at bottomWie dekollete ich eine Eigenschaft als read-write in der UIResponder-Unterklasse mit swift?

ich nicht die inputAccessoryView für meine Viewcontroller scheinen zu setzen, nach der Dokumentation, muss ich es neu deklarieren:

Der Wert dieser schreibgeschützten Eigenschaft ist null. Wenn Sie benutzerdefinierte Steuerelemente an eine vom System bereitgestellte Eingabeansicht (z. B. die Systemtastatur ) oder an eine benutzerdefinierte Eingabeansicht anhängen möchten, geben Sie diese Eigenschaft in einem UIResponder als schreibgeschützt zurück Unterklasse. Sie können diese Eigenschaft dann verwenden, um eine benutzerdefinierte Ansicht zu verwalten. Wenn der Empfänger zum ersten Beantworter wird, hängt die Infrastruktur des Responders die Zubehöransicht an den entsprechenden Eingang an, bevor sie angezeigt wird.

Ich kann nicht herausfinden, wie dies mit Swift zu tun. Jede Hilfe wird sehr geschätzt.

Antwort

1

Alte Frage, aber das kann für diejenigen nützlich sein, die Objective-C nicht allzu vertraut sind.

Ich bin mir nicht sicher, wie dies zu erreichen mit schnellen allein aber es ist leicht genug, um die „schmutzige Arbeit“ in Ziel c Land und nutzen Sie das Ergebnis in schnellen

Prozess zu tun

Dieser Ansatz erfordert 3 Dateien, die zu Ihrem Projekt hinzugefügt werden müssen.

  1. eine objektive C-Klasse hinzufügen, kopieren Sie den folgenden Code in die zwei neue Dateien einfügen (.h, .m)
  2. eine Brückenkopf hinzufügen und kopieren und in sie fügen Sie den angegebenen Import
  3. An dieser Stelle können Sie jede Swift-Klasse aus dieser Objectiv c Klasse statt UIView und et voila erweitern, Sie können die inputAccessoryView ändern.

Genießen

.h-Datei

#import <UIKit/UIKit.h> 

/** 
* Starting point for subclasses that allow input accessorty view to be changed 
*/ 
@interface YourBaseView : UIView 

@property (readwrite,nonatomic) UIView*_Nullable inputAccessoryView; 
@end 

.m-Datei

#import "YourBaseView.h" 

@implementation YourBaseView 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
- (void)drawRect:(CGRect)rect { 
// Drawing code 
} 
*/ 

@end 

Bridging-Header

Im "YOUR_PROJECT_NAME -Bridging-header.h" (oder was auch immer ihre Namen in der Objective-C Bridging Header-Eigenschaft in Buildeinstellungen Ihres Projektes (SWIFT_OBJC_BRIDGING_HEADER)

#import "YourBaseView.h" 

Swift Demo

class YourSwiftAccessoryInputView : YourBaseView 
{ 
    //the rest is up to you 
} 

let instance = YourSwiftAccessoryInputView(frame: CGRect(x:0, y:0,width:100,height:100)) 
instance.inputAccessoryView = Some view 
0

So:

private let accessoryView = AccessoryView() 
class MessagesViewController : UIViewController { 
    override var inputAccessoryView: AccessoryView { 
     return accessoryView 
    } 
} 
0

Versuchen Sie dies.

private weak var _inputAccessoryViewController: UIInputViewController? 
override var inputAccessoryViewController: UIInputViewController? { 
    get { 
     return _inputAccessoryViewController 
    } 
    set { 
     _inputAccessoryViewController = newValue 
    } 
} 

Wie auch immer, ich glaube nicht, dass dies irgendwelche Unterschiede macht.