Estoy construyendo un lector de RSS con Swift y necesito implementar la funcionalidad de extracción para recargar.
Así es como estoy tratando de hacerlo.
class FirstViewController: UIViewController,
UITableViewDelegate, UITableViewDataSource {
@IBOutlet var refresh: UIScreenEdgePanGestureRecognizer
@IBOutlet var newsCollect: UITableView
var activityIndicator:UIActivityIndicatorView? = nil
override func viewDidLoad() {
super.viewDidLoad()
self.newsCollect.scrollEnabled = true
// Do any additional setup after loading the view, typically from a nib.
if nCollect.news.count <= 2{
self.collectNews()
}
else{
self.removeActivityIndicator()
}
view.addGestureRecognizer(refresh)
}
@IBAction func reload(sender: UIScreenEdgePanGestureRecognizer) {
nCollect.news = News[]()
return newsCollect.reloadData()
}
Estoy obteniendo :
La propiedad 'self.refresh' no se inicializó en la llamada super.init
Por favor, ayúdame a comprender el comportamiento de los reconocedores de gestos. Un código de muestra que funcione será de gran ayuda.
Gracias.
ios
swift
xcode
uirefreshcontrol
xrage
fuente
fuente
Respuestas:
Tire para actualizar está construido en iOS. Podrías hacer esto rápidamente
En algún momento podrías terminar refrescando.
fuente
Una solución con storyboard y rápida ...
1.) Abra su archivo .storyboard, seleccione un TableViewController en su storyboard y "Habilite" el Table View Controller - Función de actualización en las Utilidades.
2.) Abra la clase UITableViewController asociada y agregue la siguiente línea en el método viewDidLoad.
Editado para Swift 5.0:
O en Swift 2.2:
3.) Agregue el siguiente método sobre viewDidLoad-Method
fuente
put self.tableView.reloadData()
yself.refreshControl?.endRefreshing()
en la devolución de llamada?reloadData()
en la cola principal para actualizar tu IU al instante:dispatch_async(dispatch_get_main_queue(),{ self.tableView.reloadData() });
Me gustaría mencionar una característica PRETTY COOL que se ha incluido desde iOS 10, que es:
Por ahora, UIRefreshControl es directamente compatible con cada uno de
UICollectionView
,UITableView
yUIScrollView
!Cada una de estas vistas tiene la propiedad de instancia refreshControl , lo que significa que ya no es necesario agregarla como una subvista en su vista de desplazamiento , todo lo que tiene que hacer es:
Personalmente, considero que es más natural tratarlo como una propiedad para la vista de desplazamiento más que agregarlo como una subvista, especialmente porque la única vista apropiada para ser una supervista para un UIRefreshControl es una vista de desplazamiento, es decir, la funcionalidad de usar UIRefreshControl es solo útil cuando se trabaja con una vista de desplazamiento; Es por eso que este enfoque debería ser más obvio para configurar la vista de control de actualización.
Sin embargo, todavía tiene la opción de usar el
addSubview
basado en la versión de iOS:fuente
doSomething
función, si es accesible, entonces debe verificar su código.Swift 4
Y podrías dejar de refrescarte con:
fuente
tableView.reloadData()
en tu ejemplo!var refControl: UIRefreshControl{ let rfControl = UIRefreshControl() rfControl.attributedTitle = NSAttributedString(string: "") rfControl.tintColor = UIColor(red:0.16, green:0.68, blue:0.9, alpha:1) rfControl.addTarget(self, action: #selector(getNewMessageList), for: .valueChanged) return rfControl }
. Luego llame a endRefreshing (), no funciona (el control de actualización todavía se muestra allí), pero siga su camino, funcionó, por favor, avíseme por qué..valueChanged
se desencadena el evento? No entiendo esta conexión.En Swift usa esto,
Si desea tener pull para actualizar en WebView,
Entonces prueba este código:
fuente
La respuesta de Anhil me ayudó mucho.
Sin embargo, después de experimentar más, noté que la solución sugerida a veces causa un problema de interfaz de usuario no tan bonito .
En cambio, ir por este enfoque * hizo el truco para mí.
* Swift 2.1
fuente
Lo que te dice el error es que
refresh
no está inicializado. Tenga en cuenta que eligió para querefresh
no opcional, que en los medios de Swift que tiene que tener un valor antes de llamar asuper.init
(o se llama de forma implícita, que parece ser el caso). Hagarefresh
opcional (probablemente lo que desee) o inicialícelo de alguna manera.Sugeriría leer nuevamente la documentación introductoria de Swift, que cubre esto en gran extensión.
Una última cosa, que no forma parte de la respuesta, como señaló @Anil, hay un tirón incorporado para actualizar el control en iOS llamado
UIRefresControl
, que podría ser algo que valga la pena analizar.fuente
Creé una aplicación de fuente RSS en la que tengo una actualización de Pull To función de que originalmente tenía algunos de los problemas enumerados anteriormente.
Pero para agregar a las respuestas de los usuarios anteriores, estaba buscando mi caso de uso en todas partes y no pude encontrarlo. Estaba descargando datos de la web (RSSFeed) y quería desplegar mi tabla Vista de historias para actualizar.
Lo que se mencionó anteriormente cubre las áreas correctas, pero con algunos de los problemas que tiene la gente, esto es lo que hice y funciona:
Tomé el enfoque de @Blankarsch y fui a mi main.storyboard y seleccioné la vista de tabla para usar la actualización, luego lo que no se mencionó es crear IBOutlet e IBAction para usar la actualización de manera eficiente
Espero que esto ayude a cualquiera en la misma situación que yo
fuente
fuente
Detalles
Caracteristicas
Solución
Uso
Muestra completa
fuente
Swift 5
fuente
Sugiero hacer una extensión de pull To Refresh para usar en cada clase.
1) Cree un archivo swift vacío: Archivo - Nuevo - Archivo - Archivo Swift.
2) Agregue lo siguiente
3) En su controlador de vista llame a estos métodos como:
4) En algún momento quisiste terminar la actualización:
fuente
Para el tirón para actualizar estoy usando
DGElasticPullToRefresh
https://github.com/gontovnik/DGElasticPullToRefresh
Instalación
pod 'DGElasticPullToRefresh'
anular función viewWillAppear (_ animado: Bool)
Y no olvide eliminar la referencia mientras la vista desaparecerá
para eliminar pull para actualizar, ponga este código en su
anular func viewDidDisappear (_ animated: Bool)
Y se verá como
Feliz codificación :)
fuente
Puede lograr esto usando pocas líneas de código. Entonces, ¿por qué vas a estar atascado en la biblioteca de terceros o la interfaz de usuario? Tire para actualizar está construido en iOS. Podrías hacer esto rápidamente
fuente
puedes usar esta subclase de tableView:
1: en el creador de interfaces, cambie la clase de su tableView ao
PullToRefreshTableView
cree unPullToRefreshTableView
programa2 - implemente el
PullToRefreshTableViewDelegate
en su controlador de vista3 -
tableViewDidStartRefreshing(tableView: PullToRefreshTableView)
se llamará en su controlador de vista cuando la vista de tabla comience a actualizarse4 - llame
yourTableView.endRefreshing()
para finalizar la actualizaciónfuente
Así es como lo hice funcionar usando Xcode 7.2, que creo que es un error importante. Lo estoy usando dentro de mi
UITableViewController
interiorviewWillAppear
Como puede ver, literalmente tengo que llamar al
configureMessage()
método después de configurar miUIRefreshControl
, luego de eso, las actualizaciones posteriores funcionarán bien.fuente
Otras respuestas son correctas, pero para obtener más detalles, consulte esta publicación Tire para actualizar
Cuando trabajas con un UITableViewController, la solución es bastante simple: primero, selecciona el controlador de vista de tabla en tu guión gráfico, abre el inspector de atributos y habilita la actualización:
Un UITableViewController viene equipado con una referencia a un UIRefreshControl listo para usar. Simplemente necesita conectar algunas cosas para iniciar y completar la actualización cuando el usuario se retira.
En su reemplazo de viewDidLoad (), agregue un destino para manejar la actualización de la siguiente manera:
refreshControl.endRefreshing()
Para obtener más información, vaya a mencionar Link y todo el crédito va a esa publicación
fuente