J'écris une application SplitView iPad. Dans le DétachantViewController, il y a une petite vue contenant un Et c'est le cas où les problèmes sont disponibles: chaque fois que j'utilise la barre de recherche, le DisplayController (je suppose) atténue tout ce qui est présent dans le DétachantViewController, y compris la vue d'image. Cela n'est pas compatible avec ce que quelqu'un s'attendrait à l'exécution de l'application. Y a-t-il un moyen de définir le cadre pour être atténué? Ou au moins désactiver la gradation pour le bien? P>
Merci d'avance. P> uableview code> et un
uisearchbar code> et son contrôleur. Cette vue ne représente pas l'espace de l'écran entier réservé à la sectionVue de détailViewController. En fait, il utilise juste la moitié de cela. Il y a un
uiImageView code> de l'autre moitié. P>
4 Réponses :
Vous êtes correct qu'il s'agit de l'UISEarchDisplayController qui gère l'effet "gradmage" que vous voyez.
Qu'est-ce que l'UisearchDisplayController est en train d'ajouter un uicontrol sous forme de sousview à la vue de la rechercheContentsController (une propriété de UisearchDisplayController), qui est probablement votre contrôleur de vue détaillé. Cet uicontrol n'est qu'une vue alpha'd avec un fond gris. Il semble avoir un gestionnaire d'événements à l'intérieur de touche qui prend fin à la recherche lorsqu'il est taraudé. P>
Pour contraindre l'effet de gradation à votre sous-vue de la vue détaillée, vous devez faire trois choses. (Je suppose que votre contrôleur de vue détaillé est défini via une XIB. Sinon, ces étapes peuvent également être effectuées en code.) P>
1) Ajouter une nouvelle uIViewController à votre contrôleur de détail-View-contrôleur xib. Joignez ce nouveau contrôleur de visualisation à une iboutlet de votre contrôleur de vue détaillé. Dans mon exemple, j'appelle cette "_SearchareaViewController". Ceci est important, même si vous n'ayez jamais accès au contrôleur d'affichage (mais souvenez-vous, vous devrez le relâcher à un moment donné) P>
@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate, UITableViewDelegate, UITableViewDataSource> { UIPopoverController *popoverController; UIToolbar *toolbar; id detailItem; UILabel *detailDescriptionLabel; IBOutlet UIViewController* _searchAreaViewController; }
Après cela, la zone sombre encore ... Mon seul doute est sur l'étape numéro 2. Lorsque vous reliez la vue sur le contrôleur d'affichage, il correspond à une prise pour le contrôleur de vue de détail et à la société SearchAreaViewController. Est-ce exact? Si je supprimais la référence au contrôleur de vue détaillée, l'application se bloque au démarrage.
Non, cela ne devrait être que la vue de la nouvelle "SearchAreaViewController". Cette vue doit être une sous-vision de la vue détailléeViewController. Est-ce ce que vous avez?
Merci d'avoir pris votre temps à construire cet échantillon, Tom. Maintenant je l'ai bien compris.
Comment se fait-il seulement quand j'ajoute une iboutlet pour _SearchareaViewController, ça marche? Si je ne l'ai pas fait, les résultats de la recherche n'apparaîtront même pas.
Salut Tomswift, vous n'avez aucune idée de la manière dont votre exemple de projet m'a aidé à obtenir de la rechercheDisplayController pour l'entretien. Merci beaucoup. J'ai 2 utablesviews dans une seule vue de visualisation qui couvre finalement un demi-écran chacun et je voulais placer SearchDisplayController pour l'un d'entre eux. J'avais essayé depuis un mois, mais d'autres ou l'autre comment ça ne marche pas pour moi.
Pourriez-vous clarifier ce que vous entendez par «Utilisez la barre de recherche» et «Dimens tout est présent»? J'inprise ce que vous avez écrit de manière à ce que le clavier apparaisse lorsque vous êtes sur le point de saisir du texte dans le champ de texte de la barre de recherche. Et qu'à ce stade, la vue détaillée est atténuée, empêchant l'interaction de l'utilisateur. P>
La cause est que la barre de recherche implémente une boîte de dialogue modale qui empêche l'interaction de l'utilisateur avec la vue tant que le clavier est affiché. Malheureusement, il ne semble pas y avoir de moyen de configurer la barre de recherche pour empêcher ce comportement. D'autre part, je ne suis pas sûr que l'utilisateur ne s'attend pas à ce comportement car les barres de recherche sont modales systématiquement et se comportent comme celle-ci en général sous iOS. P>
J'ai essayé deux autour de: p>
1.) Il existe une propriété du 2.) Vous auriez besoin d'écrire votre propre remplacement de barre de recherche non modale puisqu'un Uitextfield standard n'est pas modal et ne résume ainsi aucun autre élément d'interface utilisateur. Cette approche fonctionne, mais vous aurez peut-être besoin d'un peu plus de travail pour qu'il ressemble à une barre de recherche "régulière". Mais encore une fois, puisque cette barre de recherche se comporte différemment des barres de recherche normales modales dans iOS, cela pourrait ne pas vraiment être ce que les utilisateurs attendent. P> uiviewcontroller code> appelé
modalpresentationstyle code> qui produit exactement le comportement que vous décrivez s'il a la valeur
uimodalpresentationformshethfice code> ( "Toutes les zones non couvertes sont dimédées pour empêcher l'utilisateur d'interagir avec eux.", Voir le Documentation Apple ). Mais définir cette propriété à différentes valeurs ne change pas le résultat (au moins pour moi, cela n'a pas fonctionné). P>
Je sais que je suis en retard et c'est une idée horrible ici, mais "sethadden: non" n'a pas fonctionné pour moi.
iOS 8+ iOS 7 p> Je sais que UisearchDisplayController est obsolète pour le moment, mais si vous avez toujours besoin de Utilisez-le, vous pouvez résoudre parfaitement votre problème avec une ligne de code parfaitement. Ajoutez-le à la méthode ViewDidLoad. P> p>
Cette réponse ne semble pas ajouter quelque chose d'important à la question. Si cela discute de nouveaux changements, d'autres développeurs doivent faire attention depuis que les autres réponses ont été publiées, veuillez en faire disparaître abondamment dans votre réponse, car cette question est si ancienne. Mieux encore, suggère une modification de la réponse appropriée pour la mettre à jour.
@Ghedipunk, je pense que vous avez tort et cette réponse ajoute quelque chose de significatif, car d'autres développeurs ne pouvaient désormais passer beaucoup de temps à lutter et à mettre en œuvre tant d'étapes qu'avant. P.s. La réponse a été mise à jour.
Ensuite, utilisez plus de 2 lignes de code et un paragraphe mal écrit pour expliquer pourquoi cela ajoute quelque chose de significatif.
La réponse peut i> avoir raison, mais ce n'est pas utile i>. Veuillez prendre quelques minutes pour modifier cette réponse afin de promener l'utilisateur sur la manière d'utiliser ces lignes de code et des avantages. C'est une ancienne question, alors il convient de prendre des précautions supplémentaires pour de nouvelles questions.