7
votes

Détecter le défilement TextView pour afficher un bouton de Swift 3.0

J'ai un TextView et un bouton caché dans un UIView, et j'essaie de détecter lorsque l'utilisateur fait défiler l'utilisateur vers le bas d'une longue liste de texte et d'afficher le bouton caché lorsqu'il atteint le bas. J'ai vu de vieux messages sur la façon dont il a été fait à Obj-C à l'aide de ScrollViewDidscroll, mais pas vraiment sûr de la façon de le faire avec Swift, ou comment le faire avec un TextView au lieu d'une vision de Scroll. Toute aide serait excellente car je ne suis pas allé très loin avec celui-ci.

Jusqu'à présent, c'est ma tentative de traduire le poste Obj-C à Swift, mais cela n'a pas fonctionné pour moi, en fait je suis pas même sûr que la fonction est appelée: xxx

merci pour toute aide à l'avance :)


7 commentaires

1st - @iboutlet var TEXTVIEW: Uiscrollview! , mais Func ScrollViewDidscroll (Textv: UitextView) Les deux sont différents. Essayez à la fois ScrollView ou TextView. Ce code fonctionnera.


Bonjour, je l'ai réparé dans l'exemple. Essayé dans mon code aussi, mais cela n'a pas fonctionné. Merci quand même.


Est-ce que cela a appelé la méthode Didscroll? et vérifier la prise et les délégués sont connectés pour l'UITEXTVIEW.


J'ai essayé une instruction d'impression dans la fonction ScrollViewDidscroll, mais elle n'est pas appelée même si la sortie est connectée et que le TextView.delegate est défini dans la vue ViewDidLoad :(


Définissez la déléguée dans XIB ou dans Storyboard vers la vue Mainvc.


J'avais déjà activé dans le storyboard, donc ce n'était pas le problème :(


Je me demande si cela ne fonctionne pas parce que c'est une vue texte?


3 Réponses :


2
votes

Si le bouton est dans le dernier point de vue (Self.View), je pense que vous devez vérifier que votre point de contenu de contenu est au bas du contenu. Donc, vous pourriez probablement faire quelque chose comme: xxx


4 commentaires

Désolé, je suis toujours nouveau à Swift. Où dois-je correspondre à cela?


(void) ScrollViewDidendDecelerating: (Uiscrollview *) ScrollView {} Cette méthode est une méthode de déléguée de vue de défilement. Ne collez pas ce code à l'intérieur de n'importe quel bloc de fonction / méthode. C'est lui-même une fonction, de sorte que la collez-la n'importe où à l'intérieur de la classe (après viendDidLoad and View apparaisse).


(void) ScrollViewDidendDeceleratier: (UISCrollView *) ScrollView {Float BotSedged = ScrollVief.Contententoffset.y + Scrollview.frame.Size.Height; Si (Botgedge> = ScrollView.Contentsize.Height) {Self.YourbuttonName.Choriz = True}}


Je l'ai essayé, mais je reçois une erreur disant: Déclaration attendue.



3
votes
(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{

float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height

if (bottomEdge >= scrollView.contentSize.height) {

    self.yourButtonName.hidden = true
    }
}

3 commentaires

Coller ce code. L'erreur de déclaration attendue vient en cas d'erreur de syntaxe de code.


Dois-je changer de texte? Je reçois toujours la même erreur, même après avoir renommé le bouton.


@Maksym MusIienko ScrollView.ContentOffset.y + ScrollView.bounds.Height > Je pense que cette ligne de code indique la position du défilement de la vue Scroll de la vue n'est pas en bas. Ai-je raison?



12
votes

uitextview code> est la sous-classe de Uiscrollview code> et si vous regardez à la déclaration, vous verrez que c'est uiscrollviewelegate code> par défaut, afin que vous puissiez Supprimez le Uiscrollviewelegate code> à la déclaration de votre contrôleur. Au lieu de cela, faites votre contrôleur uitextviewdeelegate code> qui lui permet d'appeler ScrollViewDidscrollMethod.

class ViewController: UIViewController, UITextViewDelegate {

    @IBOutlet weak var textView: UITextView! {
        didSet {
            textView.delegate = self
        }
    }
    @IBOutlet weak var button: UIButton! {
        didSet {
            button.hidden = true
        }
    }

    func scrollViewDidScroll(scrollView: UIScrollView) {
        button.hidden = scrollView.contentOffset.y + scrollView.bounds.height < scrollView.contentSize.height
    }
}


1 commentaires

Je suis relativement nouveau à Swift, j'apprécie également comment a déclaré l'état de départ et le délégué pour le bouton TextView et le bouton dans les instructions Iboutlet plutôt que dans la vue ViewDidLoad car je n'étais pas au courant, on pourrait le faire, donc merci!