2014-11-10 13 views
8

sto cercando di seguire questa guida, ma con rapido: InputAccessoryView docked at bottomCome posso ridichiarare una proprietà come read-write nella sottoclasse UIResponder con swift?

io non riesco a impostare l'inputAccessoryView per il mio ViewController, in base alla documentazione, ho bisogno di ridichiarare esso:

Il valore di questa proprietà di sola lettura è nullo. Se si desidera collegare i controlli personalizzati a una vista di input fornita dal sistema (come la tastiera del sistema ) oa una visualizzazione di input personalizzata (quella fornita nella proprietà inputView ), dichiarare nuovamente questa proprietà come lettura-scrittura in un UIResponder sottoclasse. È quindi possibile utilizzare questa proprietà per gestire una vista personalizzata dell'accessorio . Quando il ricevitore diventa il primo soccorritore, l'infrastruttura del risponditore attacca la vista accessoria all'ingresso appropriato vista prima di visualizzarla.

Non riesco a capire come farlo usando swift. Qualsiasi aiuto è molto apprezzato.

risposta

1

Vecchia domanda, ma questo può essere utile a coloro che non hanno familiarità con Objective-C.

io non sono sicuro di come raggiungere questo obiettivo con rapida solo ma è abbastanza facile da fare il "lavoro sporco" in Objective C terreno e utilizzare il risultato in rapida

processo

Questo approccio richiede 3 file da aggiungere al progetto.

  1. Aggiungi una classe Objective C, copiare e incollare il seguente codice nel due nuovi file (.h, .m)
  2. aggiungere un'intestazione di bridging e copiare e incollare in esso l'importazione specificato
  3. A questo punto puoi estendere qualsiasi classe rapida da questa classe Obiettivo c invece di UIView ed et voilà, puoi modificare l'input inputAccessoryView.

Godetevi

file h

#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 file di

#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

Nella "YOUR_PROJECT_NAME -Bridging-header.h" (o qualunque sia la sua chiamata nella proprietà Objective-C Bridging Header in impostazioni di generazione del progetto (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

Ti piace questa:

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

Prova questo.

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

In ogni caso, non credo che questo faccia alcuna differenza.

Problemi correlati