Як я можу встановити максимальну кількість символів UITextField
на iPhone SDK під час завантаження UIView
?
Як я можу встановити максимальну кількість символів UITextField
на iPhone SDK під час завантаження UIView
?
Відповіді:
Хоча UITextField
клас не має властивості максимальної довжини, отримати цю функціональність досить просто, встановивши текстове поле delegate
та застосувавши такий метод делегування:
Ціль-С
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// Prevent crashing undo bug – see note below.
if(range.length + range.location > textField.text.length)
{
return NO;
}
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return newLength <= 25;
}
Швидкий
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let currentCharacterCount = textField.text?.count ?? 0
if range.length + range.location > currentCharacterCount {
return false
}
let newLength = currentCharacterCount + string.count - range.length
return newLength <= 25
}
Перед тим, як зміниться текстове поле, UITextField запитує делегата, чи слід змінити вказаний текст . Наразі текстове поле не змінилося, тому ми захоплюємо його поточну довжину та довжину рядка, яку ми вставляємо (або через вставку скопійованого тексту, або введення одного символу за допомогою клавіатури) за вирахуванням довжини діапазону. Якщо це значення занадто довге (більше 25 символів у цьому прикладі), поверніться, NO
щоб заборонити зміни.
Під час введення одного символу в кінці текстового поля range.location
буде вказана довжина поточного поля і range.length
буде 0, оскільки ми нічого не замінюємо / видаляємо. Вставлення в середину текстового поля просто означає інше range.location
, а вставлення декількох символів просто означає, що в ньому string
є більше одного символу.
Видалення одиночних символів або вирізання декількох символів задається символом a range
з нульовою довжиною та порожнім рядком. Заміна - це лише видалення діапазону з не порожнім рядком.
Як згадується в коментарях, є помилка, UITextField
яка може призвести до аварії.
Якщо ви вставите в поле, але вставку перешкоджає ваша реалізація перевірки, операція вставки все ще записується в буфер скасування програми. Якщо потім ви скасуєте скасування (струшуючи пристрій і підтвердивши скасування), UITextField
спробу буде замінити рядок, який, на його думку, він вставив у себе порожнім рядком. Це вийде з ладу, тому що він ніколи насправді не вставляв рядок у себе. Він спробує замінити частину рядка, яка не існує.
На щастя, ви можете захистити себе UITextField
від вбивства таким чином. Вам просто потрібно переконатися, що діапазон, який він пропонує замінити , існує в його поточному рядку. Ось що робить попередня перевірка санітарності.
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let str = (textView.text + text)
if str.characters.count <= 10 {
return true
}
textView.text = str.substring(to: str.index(str.startIndex, offsetBy: 10))
return false
}
Сподіваюся, це вам корисно.
return newLength <= 25;
UITextField
на iPad iOS 8.1. (+1 для коментаря). Чи додав би автор щось про це, оскільки це найкраща відповідь? Я радий редагувати, але мої регулярно здаються відхиленими! :-)
import UIKit
private var kAssociationKeyMaxLength: Int = 0
extension UITextField {
@IBInspectable var maxLength: Int {
get {
if let length = objc_getAssociatedObject(self, &kAssociationKeyMaxLength) as? Int {
return length
} else {
return Int.max
}
}
set {
objc_setAssociatedObject(self, &kAssociationKeyMaxLength, newValue, .OBJC_ASSOCIATION_RETAIN)
addTarget(self, action: #selector(checkMaxLength), for: .editingChanged)
}
}
@objc func checkMaxLength(textField: UITextField) {
guard let prospectiveText = self.text,
prospectiveText.count > maxLength
else {
return
}
let selection = selectedTextRange
let indexEndOfText = prospectiveText.index(prospectiveText.startIndex, offsetBy: maxLength)
let substring = prospectiveText[..<indexEndOfText]
text = String(substring)
selectedTextRange = selection
}
}
Редагувати: виправлено проблему з витоком пам’яті.
Дякую серпня! ( Допис )
Це код, який я закінчив, і який працює:
#define MAX_LENGTH 20
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField.text.length >= MAX_LENGTH && range.length == 0)
{
return NO; // return NO to not change text
}
else
{return YES;}
}
return textField.text.length < MAX_LENGTH || range.length != 0;
Для завершення відповіді в серпні можлива реалізація запропонованої функції (див . Делегат UITextField ).
Я не перевіряв код domness , але мій не зациклювався , якщо користувач досяг межі, і він сумісний з новою рядком, який приходить замінити менший або рівний.
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
//limit the size :
int limit = 20;
return !([textField.text length]>limit && [string length] > range.length);
}
Ви не можете це зробити безпосередньо - UITextField
не має атрибута maxLength , але ви можете встановити UITextField's
делегат, а потім скористатися:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
Часто у вас є кілька полів введення з різною довжиною.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
int allowedLength;
switch(textField.tag) {
case 1:
allowedLength = MAXLENGTHNAME; // triggered for input fields with tag = 1
break;
case 2:
allowedLength = MAXLENGTHADDRESS; // triggered for input fields with tag = 2
break;
default:
allowedLength = MAXLENGTHDEFAULT; // length default when no tag (=0) value =255
break;
}
if (textField.text.length >= allowedLength && range.length == 0) {
return NO; // Change not allowed
} else {
return YES; // Change allowed
}
}
Найкращим способом було б налаштувати сповіщення про зміну тексту. У вашому -awakeFromNib
способі контролера перегляду вам потрібно:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(limitTextField:) name:@"UITextFieldTextDidChangeNotification" object:myTextField];
Потім в той же клас додайте:
- (void)limitTextField:(NSNotification *)note {
int limit = 20;
if ([[myTextField stringValue] length] > limit) {
[myTextField setStringValue:[[myTextField stringValue] substringToIndex:limit]];
}
}
Потім підключіть розетку myTextField
до своєї, UITextField
і це не дозволить вам додати більше символів після досягнення межі. Обов’язково додайте це до методу угоди:
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UITextFieldTextDidChangeNotification" object:myTextField];
Я створив цей підклас UITextFieldLimit:
Візьміть UITextFieldLimit.h
і UITextFieldLimit.m
з цього сховища GitHub:
https://github.com/JonathanGurebo/UITextFieldLimit
і починайте тестувати!
Позначте створений UITextField вашої розкадровки та зв’яжіть його з моїм підкласом за допомогою Інспектора ідентичності:
Потім ви можете пов’язати його з IBOutlet і встановити ліміт (за замовчуванням - 10).
Ваш файл ViewController.h повинен містити: (якщо ви не хочете змінювати налаштування, як-от обмеження)
#import "UITextFieldLimit.h"
/.../
@property (weak, nonatomic) IBOutlet UITextFieldLimit *textFieldLimit; // <--Your IBOutlet
Ваш файл ViewController.m повинен @synthesize textFieldLimit
.
Встановіть обмеження довжини тексту у файлі ViewController.m:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[textFieldLimit setLimit:25];// <-- and you won't be able to put more than 25 characters in the TextField.
}
Сподіваюся, клас вам допоможе. Удачі!
Цього має бути достатньо для вирішення проблеми (замініть 4 лімітом u want). Просто не забудьте додати делегата в ІБ.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
return (newString.length<=4);
}
Використовуйте розширення нижче, щоб встановити максимальну довжину символів a UITextField
і UITextView
.
Swift 4.0
private var kAssociationKeyMaxLength: Int = 0
private var kAssociationKeyMaxLengthTextView: Int = 0
extension UITextField {
@IBInspectable var maxLength: Int {
get {
if let length = objc_getAssociatedObject(self, &kAssociationKeyMaxLength) as? Int {
return length
} else {
return Int.max
}
}
set {
objc_setAssociatedObject(self, &kAssociationKeyMaxLength, newValue, .OBJC_ASSOCIATION_RETAIN)
addTarget(self, action: #selector(checkMaxLength), for: .editingChanged)
}
}
@objc func checkMaxLength(textField: UITextField) {
guard let prospectiveText = self.text,
prospectiveText.count > maxLength
else {
return
}
let selection = selectedTextRange
let indexEndOfText = prospectiveText.index(prospectiveText.startIndex, offsetBy: maxLength)
let substring = prospectiveText[..<indexEndOfText]
text = String(substring)
selectedTextRange = selection
}
}
extension UITextView:UITextViewDelegate {
@IBInspectable var maxLength: Int {
get {
if let length = objc_getAssociatedObject(self, &kAssociationKeyMaxLengthTextView) as? Int {
return length
} else {
return Int.max
}
}
set {
self.delegate = self
objc_setAssociatedObject(self, &kAssociationKeyMaxLengthTextView, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
public func textViewDidChange(_ textView: UITextView) {
checkMaxLength(textField: self)
}
@objc func checkMaxLength(textField: UITextView) {
guard let prospectiveText = self.text,
prospectiveText.count > maxLength
else {
return
}
let selection = selectedTextRange
let indexEndOfText = prospectiveText.index(prospectiveText.startIndex, offsetBy: maxLength)
let substring = prospectiveText[..<indexEndOfText]
text = String(substring)
selectedTextRange = selection
}
}
Ви можете встановити ліміт нижче.
Я моделюю фактичну заміну рядка, яка має відбутися для обчислення довжини наступної рядки:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
if([newString length] > maxLength)
return NO;
return YES;
}
Версія Swift 3 // ***** Це НЕ буде працювати з Swift 2.x! ***** //
Спочатку створіть новий файл Swift: TextFieldMaxLength.swift, а потім додайте код нижче:
import UIKit
private var maxLengths = [UITextField: Int]()
extension UITextField {
@IBInspectable var maxLength: Int {
get {
guard let length = maxLengths[self]
else {
return Int.max
}
return length
}
set {
maxLengths[self] = newValue
addTarget(
self,
action: #selector(limitLength),
for: UIControlEvents.editingChanged
)
}
}
func limitLength(textField: UITextField) {
guard let prospectiveText = textField.text,
prospectiveText.characters.count > maxLength
else {
return
}
let selection = selectedTextRange
let maxCharIndex = prospectiveText.index(prospectiveText.startIndex, offsetBy: maxLength)
text = prospectiveText.substring(to: maxCharIndex)
selectedTextRange = selection
}
}
а потім ви побачите на сторінці розкадрування нове поле (максимальна довжина), коли ви виберете будь-яке TextField
якщо у вас є ще запитання, перегляньте це посилання: http://www.globalnerdy.com/2016/05/18/ios-programming-trick-how-to-use-xcode-to-set-a-text-fields -максимальна довжина візуального-студійного стилю /
Використовуючи програму Interface builder, ви можете зв’язати та отримати подію для "Редагування змінено" в будь-якій функції. Тепер ви можете поставити перевірку на довжину
- (IBAction)onValueChange:(id)sender
{
NSString *text = nil;
int MAX_LENGTH = 20;
switch ([sender tag] )
{
case 1:
{
text = myEditField.text;
if (MAX_LENGTH < [text length]) {
myEditField.text = [text substringToIndex:MAX_LENGTH];
}
}
break;
default:
break;
}
}
Наступний код схожий на відповідь серпа, але правильно обробляє операції копіювання та вставки. Якщо ви спробуєте вставити текст, який перевищує межу, наступний код урізає текст, щоб він відповідав межі, а не повністю відмовлявся від операції вставки.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
static const NSUInteger limit = 70; // we limit to 70 characters
NSUInteger allowedLength = limit - [textField.text length] + range.length;
if (string.length > allowedLength) {
if (string.length > 1) {
// get at least the part of the new string that fits
NSString *limitedString = [string substringToIndex:allowedLength];
NSMutableString *newString = [textField.text mutableCopy];
[newString replaceCharactersInRange:range withString:limitedString];
textField.text = newString;
}
return NO;
} else {
return YES;
}
}
У Swift є загальне рішення для встановлення максимальної довжини. За допомогою IBInspectable ви можете додати нові атрибути в інспектор атрибутів Xcode.
import UIKit
private var maxLengths = [UITextField: Int]()
extension UITextField {
@IBInspectable var maxLength: Int {
get {
guard let length = maxLengths[self]
else {
return Int.max
}
return length
}
set {
maxLengths[self] = newValue
addTarget(
self,
action: Selector("limitLength:"),
forControlEvents: UIControlEvents.EditingChanged
)
}
}
func limitLength(textField: UITextField) {
guard let prospectiveText = textField.text
where prospectiveText.characters.count > maxLength else {
return
}
let selection = selectedTextRange
text = prospectiveText.substringWithRange(
Range<String.Index>(prospectiveText.startIndex ..< prospectiveText.startIndex.advancedBy(maxLength))
)
selectedTextRange = selection
}
}
Щоб він працював із вирізанням та вставкою рядків будь-якої довжини, я б запропонував змінити функцію на щось на зразок:
#define MAX_LENGTH 20
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSInteger insertDelta = string.length - range.length;
if (textField.text.length + insertDelta > MAX_LENGTH)
{
return NO; // the new string would be longer than MAX_LENGTH
}
else {
return YES;
}
}
Швидкий 4
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
guard let text = textField.text else { return true }
let newLength = text.count + string.count - range.length
return newLength <= 10
}
guard
?
Швидкий 2.0 +
Перш за все створити клас для цього процесу. Давайте назвемо це StringValidator.swift.
Потім просто вставте наступний код всередину нього.
import Foundation
extension String {
func containsCharactersIn(matchCharacters: String) -> Bool {
let characterSet = NSCharacterSet(charactersInString: matchCharacters)
return self.rangeOfCharacterFromSet(characterSet) != nil
}
func containsOnlyCharactersIn(matchCharacters: String) -> Bool {
let disallowedCharacterSet = NSCharacterSet(charactersInString: matchCharacters).invertedSet
return self.rangeOfCharacterFromSet(disallowedCharacterSet) == nil
}
func doesNotContainCharactersIn(matchCharacters: String) -> Bool {
let characterSet = NSCharacterSet(charactersInString: matchCharacters)
return self.rangeOfCharacterFromSet(characterSet) == nil
}
func isNumeric() -> Bool
{
let scanner = NSScanner(string: self)
scanner.locale = NSLocale.currentLocale()
return scanner.scanDecimal(nil) && scanner.atEnd
}
}
Тепер збережіть клас .....
Використання ..
Тепер перейдіть до класу viewController.swift і зробіть розетки вашого текстового поля як ..
@IBOutlet weak var contactEntryTxtFld: UITextField! //First textfield
@IBOutlet weak var contactEntryTxtFld2: UITextField! //Second textfield
Тепер перейдіть до методу textChangeCharactersInRange у текстовому полі та використовуйте наступне.
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if string.characters.count == 0 {
return true
}
let latestText = textField.text ?? ""
let checkAbleText = (latestText as NSString).stringByReplacingCharactersInRange(range, withString: string)
switch textField {
case contactEntryTxtFld:
return checkAbleText.containsOnlyCharactersIn("0123456789") && prospectiveText.characters.count <= 5
case contactEntryTxtFld2:
return checkAbleText.containsOnlyCharactersIn("0123456789") && prospectiveText.characters.count <= 5
default:
return true
}
}
Не забудьте встановити протокол / методи текстових полів делегата.
Дозвольте мені пояснити про це ... Я використовую простий процес розширення рядка, який я написав всередині іншого класу. Тепер я просто викликаю ці методи розширення з іншого класу, де мені потрібні, додаючи чек та максимальне значення.
Гості ...
Типи ...
міститьOnlyCharactersIn // Приймає лише символи.
міститьCharactersIn // Приймає поєднання символів
doesNotContainsCharactersIn // Не прийме символів
Сподіваюся, це допомогло .... Дякую ..
Цей код працює добре, коли ви вставляєте рядок більше, ніж обмежує кількість символів.
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
let str = (textView.text + text)
if str.characters.count <= 10 {
return true
}
textView.text = str.substring(to: str.index(str.startIndex, offsetBy: 10))
return false
}
Дякуємо за ваші голоси. :)
Я даю додаткову відповідь на основі @Frouo. Я думаю, що його відповідь - найкрасивіший спосіб. Тому що це загальний контроль, який ми можемо використовувати повторно.
private var kAssociationKeyMaxLength: Int = 0
extension UITextField {
@IBInspectable var maxLength: Int {
get {
if let length = objc_getAssociatedObject(self, &kAssociationKeyMaxLength) as? Int {
return length
} else {
return Int.max
}
}
set {
objc_setAssociatedObject(self, &kAssociationKeyMaxLength, newValue, .OBJC_ASSOCIATION_RETAIN)
self.addTarget(self, action: #selector(checkMaxLength), for: .editingChanged)
}
}
func checkMaxLength(textField: UITextField) {
guard !self.isInputMethod(), let prospectiveText = self.text,
prospectiveText.count > maxLength
else {
return
}
let selection = selectedTextRange
let maxCharIndex = prospectiveText.index(prospectiveText.startIndex, offsetBy: maxLength)
text = prospectiveText.substring(to: maxCharIndex)
selectedTextRange = selection
}
//The method is used to cancel the check when use Chinese Pinyin input method.
//Becuase the alphabet also appears in the textfield when inputting, we should cancel the check.
func isInputMethod() -> Bool {
if let positionRange = self.markedTextRange {
if let _ = self.position(from: positionRange.start, offset: 0) {
return true
}
}
return false
}
}
Це правильний спосіб обробки максимальної довжини на UITextField, він дозволяє клавіші повернення вийти у відставку з текстового поля як перший відповідач і дає можливість повернутися до зворотного простору користувача, коли вони досягнуть межі
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
int MAX_LENGHT = 5;
if([string isEqualToString:@"\n"])
{
[textField resignFirstResponder];
return FALSE;
}
else if(textField.text.length > MAX_LENGHT-1)
{
if([string isEqualToString:@""] && range.length == 1)
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
return TRUE;
}
}
Як щодо цього простого підходу. Це працює добре для мене.
extension UITextField {
func charactersLimit(to:Int) {
if (self.text!.count > to) {
self.deleteBackward()
}
}
}
Тоді:
someTextField.charactersLimit(to:16)
Інші відповіді не стосуються випадку, коли користувач може вставити довгий рядок із буфера обміну. Якщо я вставляю довгу нитку, її слід просто врізати, але показати. Використовуйте це у своєму делегаті:
static const NSUInteger maxNoOfCharacters = 5;
-(IBAction)textdidChange:(UITextField * )textField
{
NSString * text = textField.text;
if(text.length > maxNoOfCharacters)
{
text = [text substringWithRange:NSMakeRange(0, maxNoOfCharacters)];
textField.text = text;
}
// use 'text'
}
Звели його до 1 рядка коду :)
Встановіть делегата вашого текстового перегляду на "Я", а потім додайте <UITextViewDelegate>
у.
-(BOOL)textView:(UITextView *)a shouldChangeTextInRange:(NSRange)b replacementText:(NSString *)c {
return ((a.text.length+c.length<=7)+(c.length<1)+(b.length>=c.length)>0);
}
Цей код обліковий запис для введення нових символів, видалення символів, вибору символів, а потім введення або видалення, вибору символів і вирізання, вставки загалом, а також вибору символів та вставки.
Готово!
Крім того, ще один класний спосіб написати цей код за допомогою бітових операцій
-(BOOL)textView:(UITextView *)a shouldChangeTextInRange:(NSRange)b replacementText:(NSString *)c {
return 0^((a.text.length+c.length<=7)+(c.length<1)+(b.length>=c.length));
}
Я відкрив підклас UITextField, STATextField , який пропонує цю функціональність (та багато іншого) зі своєю maxCharacterLength
властивістю.
тепер скільки символів u хочете просто дати значення
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSUInteger newLength = [textField.text length] + [string length] - range.length;
return (newLength > 25) ? NO : YES;
}
Використовуйте цей код тут RESTRICTED_LENGTH - це довжина, яку ви хочете обмежити для текстового поля.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (textField == nameTF) {
int limit = RESTRICTED_LENGTH - 1;
return !([textField.text length]>limit && [string length] > range.length);
}
else
{
return YES;
}
return NO;
}
Я робив це в Swift для обмеження 8 символів при використанні цифрової колодки.
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
return !(textField.text?.characters.count == MAX_LENGTH && string != "")
}
Мені довелося перевірити рядок! = "", Щоб дозволити кнопку видалення працювати на цифровій колодці, інакше вона не дозволить видалити символи в текстовому полі після того, як вона досягла своєї макс.
Я реалізував розширення UITextField, щоб додати до нього властивість maxLength.
Він заснований на Xcode 6 IBInspectables, тому ви можете встановити обмеження maxLength на конструкторі інтерфейсів.
Ось реалізація:
UITextField + MaxLength.h
#import <UIKit/UIKit.h>
@interface UITextField_MaxLength : UITextField<UITextFieldDelegate>
@property (nonatomic)IBInspectable int textMaxLength;
@end
UITextField + MaxLength.m
#import "UITextField+MaxLength.h"
@interface UITextField_MaxLength()
@property (nonatomic, assign) id <UITextFieldDelegate> superDelegate;
@end
@implementation UITextField_MaxLength
- (BOOL)textField:(UITextField *) textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
//validate the length, only if it's set to a non zero value
if (self.textMaxLength>0) {
if(range.length + range.location > textField.text.length)
return NO;
if (textField.text.length+string.length - range.length>self.textMaxLength) {
return NO;
}
}
//if length validation was passed, query the super class to see if the delegate method is implemented there
if (self.superDelegate && [self.superDelegate respondsToSelector:@selector(textField:shouldChangeCharactersInRange:replacementString:)]) {
return [self.superDelegate textField:textField shouldChangeCharactersInRange:range replacementString:string];
}
else{
//if the super class does not implement the delegate method, simply return YES as the length validation was passed
return YES;
}
}
- (void)setDelegate:(id<UITextFieldDelegate>)delegate {
if (delegate == self)
return;
self.superDelegate = delegate;
[super setDelegate:self];
}
//forward all non overriden delegate methods
- (id)forwardingTargetForSelector:(SEL)aSelector {
if ([self.superDelegate respondsToSelector:aSelector])
return self.superDelegate;
return [super forwardingTargetForSelector:aSelector];
}
- (BOOL)respondsToSelector:(SEL)aSelector {
if ([self.superDelegate respondsToSelector:aSelector])
return YES;
return [super respondsToSelector:aSelector];
}
@end