Убедитесь, что в ваших текстовых полях установлен делегат, и реализуйте метод textFieldShouldReturn
. Этот метод вызывается, когда пользователь нажимает клавишу возврата (независимо от того, как он выглядит).
Метод может выглядеть примерно так:
func textFieldShouldReturn(textField: UITextField) -> Bool {
if textField == self.field1 {
self.field2.becomeFirstResponder()
}
return true
}
Фактическая логика здесь может отличаться. Существует множество подходов, и я бы определенно рекомендовал не использовать массивную цепочку if
/ else
, если у вас много текстовых полей, но суть здесь в том, чтобы определить, какое представление активно в данный момент, чтобы определить, каким должно быть представление. активный. Как только вы определили, какое представление должно стать активным, вызовите метод этого представления becomeFirstResponder
.
Для некоторой чистоты кода вы можете рассмотреть расширение UITextField
, которое выглядит примерно так:
private var kAssociationKeyNextField: UInt8 = 0
extension UITextField {
var nextField: UITextField? {
get {
return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
}
set(newField) {
objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, .OBJC_ASSOCIATION_RETAIN)
}
}
}
А затем измените наш метод textFieldShouldReturn
, чтобы он выглядел так:
func textFieldShouldReturn(textField: UITextField) -> Bool {
textField.nextField?.becomeFirstResponder()
return true
}
Как только вы это сделаете, нужно просто установить новое свойство nextField
каждого текстового поля в viewDidLoad
:
self.field1.nextField = self.field2
self.field2.nextField = self.field3
self.field3.nextField = self.field4
self.field4.nextField = self.field1
Хотя, если мы действительно Если бы мы хотели, мы могли бы добавить префикс к свойству @IBOutlet
, и это позволило бы нам подключить наше свойство "nextField" прямо в конструкторе интерфейса.
Измените расширение так, чтобы оно выглядело следующим образом:
private var kAssociationKeyNextField: UInt8 = 0
extension UITextField {
@IBOutlet var nextField: UITextField? {
get {
return objc_getAssociatedObject(self, &kAssociationKeyNextField) as? UITextField
}
set(newField) {
objc_setAssociatedObject(self, &kAssociationKeyNextField, newField, .OBJC_ASSOCIATION_RETAIN)
}
}
}
А теперь подключите свойство nextField
в конструкторе интерфейсов:
] (Настройте своего делегата, пока вы здесь тоже.)
И, конечно, если свойство nextField
возвращает nil
, клавиатура просто скрывается.
Стандартная библиотека, STL и все, что им нужно для выполнения нужной им задачи. Добавьте немного улучшений для того, что по сути является стандартными расширениями библиотеки.
Что касается C ++, то библиотека Boost ( http://www.boost.org/ ) является наиболее используемой библиотекой, поэтому вам следует начать с поиска там, если вы уже знать C ++ (вопреки тому, что я видел в некоторых из предыдущих ответов, вы должны понимать, что STL теперь является частью стандарта и, следовательно, частью языка C ++).
Слишком много других библиотек для выбора, все зависят от то, что вы собираетесь создать, если есть что-то, что вы «должны» знать, это, несомненно, будет библиотека GUI, и если вы не возражаете против раздувания, попробуйте заглянуть в Qt (www.qtcentre.org), это даст у вас почти полный набор инструментов.
Помните, что прежде чем потратить некоторое время на изучение нового API, вы должны выбрать те, которые не слишком свежие и действительно бесплатные, без привязки к строкам и без блокировки платформы,
Для C: string.h (для таких функций, как strcpy, strcmp, memcpy и т.п.) и stdio.
Очевидно стандартная библиотека C (хорошая документация по ней находится на http://www.cppreference.com/wiki/ ). В остальном это действительно зависит от того, что хочет делать ваш друг.
Если он действительно хочет заниматься численными задачами (и очень заботится о производительности), то libblas - это то, что ему нужно http: //www.netlib.org/blas/.
Для C:
Для C ++:
Также имейте в виду, что когда вы изучаете что-то вроде C или C ++ (или даже Java), вы на самом деле не изучаете «язык», на котором изучаете «платформу». Выберите платформу со всеми основными компонентами, которые вам понадобятся при написании настоящего приложения, а не возиться с синтаксисом. Чтобы эффективно и эффективно использовать язык, вам действительно нужно знать, какие инструменты у вас есть, и единственный способ сделать это - использовать хорошие примеры уже существующих инструментов. Все равно мои 2 цента.
Это действительно зависит от того, что вы собираетесь делать ... Я много использую libCurl, потому что я занимаюсь множеством вещей, связанных с Интернетом.
Это зависит от того, что хочет делать указанный новичок.
Очевидно, что стандартная библиотека вашего языка очень важна. Кроме того, это зависит от обстоятельств. Программист на C ++, вероятно, захочет ознакомиться хотя бы с некоторыми библиотеками Boost.
string.h наверное, привык много а если вы имеете дело с некоторыми вычислениями, то math.h
Я преподаю C в средней школе в Италии.
В течение 2 лет, как только они овладеют языком
(указатели и потоки в C),
студенты должны изучить другую библиотеку и
«покажи и расскажи» некоторые образцы.
Библиотеки выдаются в зависимости от их интересов
и навыки.
несколько примеров:
компьютерная графика -> freeimage
сопоставление текста -> регулярное выражение
игра -> аллегро
сеть -> сокет
база данных -> sqllite
и так далее ...
В основном я думаю, что как только вы поймете язык
(а также структуры данных ...) это должно быть
«время веселья» и следуй своим тенденциям.
libc. libstdc ++.
Вы можете добиться успеха только с этими двумя.
Обязательными являются те, которые входят в стандартную библиотеку C и стандартную библиотеку C ++ (и, как упомянул Нил в своем ответе, убедитесь, что они понимают различие между C и C ++). Помимо этого, ему следует изучить те, которые он собирается использовать в своем проекте.
Я не учитываю Boost по двум причинам: 1) я не считаю, что это требуется для новичков, и 2) многое его планируется включить в стандартную библиотеку после того, как C ++ 0x заменит старый стандарт.
Поскольку не существует такого языка, как "C / C ++", ответы, которые вы здесь получите, вряд ли будут очень полезными. Программы на C не смогут использовать библиотеки C ++, и программы на C ++, вероятно, имеют лучшие альтернативы любым предлагаемым библиотекам C.
Чтобы кодировать чистый C, позвольте ему начать, например, с ncurses . Это весело.
Я бы порекомендовал изучить библиотеки ACE, особенно если вы хотите заняться распределенной и кроссплатформенной разработкой. Это может быть немного для «новичка», но это отличный следующий шаг после изучения STL и Boost. ACE также предоставляет реализованные шаблоны проектирования.