Вот мой текущий код, и он работает, однако на небольших устройствах поля перемещаются над дисплеем пользователей. Как я могу отредактировать это, чтобы убедиться, что поля не скрываются от пользователя? Я украл часть этого кода от tut от gregbarbosa, поэтому объяснение с ответом очень помогло бы. Спасибо.Программно поднять текстовые поля пользовательского интерфейса при открытии клавиатуры
import UIKit
class LoginViewController: UIViewController {
//MARK: Storyboard
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var teamID: UITextField!
@IBOutlet weak var scoutID: UITextField!
@IBOutlet weak var pinNum: UITextField!
@IBOutlet weak var signin: UIButton!
@IBOutlet weak var diamondPic: UIImageView!
@IBOutlet weak var nodextext: UILabel!
@IBOutlet weak var loginB: UIButton!
@IBOutlet weak var moverL: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "hideKeyboard")
// prevents the scroll view from swallowing up the touch event of child buttons
tapGesture.cancelsTouchesInView = false
scrollView.addGestureRecognizer(tapGesture)
}
@IBAction func loginTapped(sender: UIButton) {
var userDefaults = NSUserDefaults.standardUserDefaults()
var secretKey = userDefaults.stringForKey("secretkey")
var team:String = teamID.text
var scout:String = scoutID.text
var password:String = pinNum.text
var loginQuery = PFQuery(className:"User")
loginQuery.whereKey("teamID", equalTo:team)
loginQuery.whereKey("scoutID", equalTo:scout)
loginQuery.whereKey("password", equalTo:password)
loginQuery.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]!, error: NSError!) -> Void in
if error == nil && objects.count != 0 {
self.performSegueWithIdentifier("SecondViewController", sender: self)
} else if error == nil && objects.count == 0{
var alert : UIAlertView = UIAlertView(title: "Login Error", message: "Your TeamID, ScoutID, or Password is inncorrect.", delegate: nil, cancelButtonTitle: "Ok")
alert.show()
} else {
// Log details of the failure
NSLog("Error: %@ %@", error, error.userInfo!)
}
}
}
@IBOutlet weak var loginTapped: UIButton!
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
self.registerForKeyboardNotifications()
}
override func viewWillDisappear(animated: Bool) {
self.deregisterFromKeyboardNotifications()
super.viewWillDisappear(true)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func registerForKeyboardNotifications() -> Void {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardDidShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardWillShowNotification, object: nil)
}
func deregisterFromKeyboardNotifications() -> Void {
println("Deregistering!")
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardDidHideNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWasShown:", name: UIKeyboardWillHideNotification, object: nil)
}
func keyboardWasShown(notification: NSNotification) {
var info: Dictionary = notification.userInfo!
var keyboardSize: CGSize = (info[UIKeyboardFrameBeginUserInfoKey]?.CGRectValue().size)!
var buttonOrigin: CGPoint = self.loginB.frame.origin;
var buttonHeight: CGFloat = self.loginB.frame.size.height;
var visibleRect: CGRect = self.view.frame
visibleRect.size.height -= keyboardSize.height
if (!CGRectContainsPoint(visibleRect, buttonOrigin)) {
var scrollPoint: CGPoint = CGPointMake(0.0, buttonOrigin.y - visibleRect.size.height + buttonHeight + 4)
self.scrollView.setContentOffset(scrollPoint, animated: true)
}
nodextext.hidden = true
diamondPic.hidden = true
}
func hideKeyboard() {
teamID.resignFirstResponder() //FirstResponder's must be resigned for hiding keyboard.
scoutID.resignFirstResponder()
pinNum.resignFirstResponder()
self.scrollView.setContentOffset(CGPointZero, animated: true)
diamondPic.hidden = false
nodextext.hidden = false
}
}
Благодарим вас за продвижение.
Если я решил использовать вид таблицы, будет он выглядит как стол, или я могу его стиль выглядеть немного более удобным для пользователя? –
Вы можете стилизовать его, как хотите. Использование статических ячеек проектирует ваш пользовательский интерфейс (если вы не хотите, чтобы он был динамичным, конечно). Вы можете отключить разделители ячеек и сделать его похожим на нормальный вид. – Ian
Существуют также другие расширения, которые делают это, если вы немного ищете Интернет – Ian