ইউআইটিএবলভিউ স্ক্রোল করার সময় কীবোর্ডটি লুকান


134

আমি যখন ইউআইটিএবলভিউ স্ক্রোলিং শুরু করি তখন আমার অ্যাপ্লিকেশনটিতে আমি হাইড কীবোর্ড চাই। আমি এটি ইন্টারনেটে অনুসন্ধান করি এবং সর্বাধিক উত্তরটি ইউআইটিএবলভিউ (http://stackoverflow.com/questions/3499810/tapping-a-uiscrolview-to-hide-the-keyboard) সাবক্লাসিং করে।

আমি সাবক্লাস তৈরি করেছিলাম কিন্তু এটি কাজ করে না।

#import <UIKit/UIKit.h>

@protocol MyUITableViewDelegate <NSObject>
@optional
- (void)myUITableViewTouchesBegan;
@end

@interface MyUITableView : UITableView <UITableViewDelegate, UIScrollViewDelegate> {
    id<MyUITableViewDelegate> delegate;
}
@end

.m ফাইল

#import "MyUITableView.h"

@implementation MyUITableView

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog(@"delegate scrollView"); //this is dont'work
    [super scrollViewDidScroll:scrollView];
}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    NSLog(@"delegate myUITableViewTouchesBegan"); // work only here
    [delegate myUITableViewTouchesBegan];
    [super touchesBegan:touches withEvent:event];

}

- (void)dealloc {
...

আমি এই ক্লাসটি এভাবে ব্যবহার করি। তবে প্রতিনিধি ফাংশন myUITableViewTouchesBegan ভিউকন্ট্রোলারে কাজ করে না

#import <UIKit/UIKit.h>
#import "MyUITableView.h"

@interface FirstViewController : UIViewController <UITableViewDelegate, UISearchBarDelegate, MyUITableViewDelegate> {
    MyUITableView *myTableView;
    UISearchBar *searchBar; 
}

@property(nonatomic,retain) IBOutlet MyUITableView *myTableView;
...

.m

- (void) myUITableViewTouchesBegan{
    NSLog(@"myUITableViewTouchesBegan");
    [searchBar resignFirstResponder];
}

এই বাস্তবায়ন নিয়ে আমার কিছুটা সমস্যা রয়েছে:
1) myUITableViewTouchesBegan ভিউকন্ট্রোলারে কাজ করবেন না
2) মাইআইটিআইটিভিউ.এম থেকে এনএসলগ - এনএসলগ (@ "ডেলিগ্রেট মাইআইটিআইটিভিউ টাউসবেগান"); আমি যখন টেবিল স্পর্শ করি তখনই কাজ করি। আমি যখন স্ক্রোলিং শুরু করি তখন এটি কীভাবে কাজ করবে?
আমি স্ক্রোলভিউডিডস্রোকলকে ওভাররাইড করার চেষ্টা করি কিন্তু কমলার বলেছে যে MyUITableVIe এই স্ট্রিং [সুপার স্ক্রোলভিউডিডসক্রল: স্ক্রোলভিউ] তে সাড়া নাও দিতে পারে ;

উত্তর:


144

আপনি কেন এটির জন্য ইউআইটিএবলভিউ সাবক্লাস করতে হবে তা নিশ্চিত নন।

প্লেইন ইউআইটিবেবল ভিউযুক্ত ভিউ কন্ট্রোলারে, এটি যুক্ত করার চেষ্টা করুন:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    [searchBar resignFirstResponder];
}

417

আইওএস and.০ এবং তারপরেও এটি অর্জনের সর্বোত্তম উপায়:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;

বা স্পর্শ করার সময় ইন্টারেক্টিভভাবে বরখাস্ত করতে:

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeInteractive;

বা সুইফটে:

tableView.keyboardDismissMode = .onDrag

ইন্টারেক্টিভভাবে বরখাস্ত করতে:

tableView.keyboardDismissMode = .interactive

21
এই অ্যাট্রিবিউট অবশ্যই নিবিস এবং স্টোরিবোর্ড ব্যবহারকারীদের জন্য অ্যাট্রিবিউট ইন্সপেক্টরটিতে সেট করা যেতে পারে।
জুজোডি

1
ডুড, আমি সম্পূর্ণরূপে এটিকে একটি আপডেট হিসাবে মিস করেছি, আমি এখনও প্রোটোকল দিয়ে পুরানো ধাঁচের উপায়টি ব্যবহার করছি যা স্ক্রোলভিউতে স্ক্রোল করেছিল .... ধন্যবাদ আমার মানুষ!
টমাস সিকোড়া

3
যারা ভুলে যায় তাদের জন্য আপনার এখনও ইউআইটিেক্সটফিল্ডকে প্রথমে পদত্যাগকারীকে পদত্যাগ করা দরকার।
skyline75489

1
আমি 3 বছর ধরে আইওএস ডেভ করে চলেছি এবং এখন অবধি আমি এই সম্পর্কে জানতাম না ... অবাস্তব।
জ্যাকব কিং

আমি কীভাবে এই জিনিস মিস করি, উজ্জ্বল!
ট্র্যাপার

129

আপনি ইন্টারফেস বিল্ডারে এটি সঠিকভাবে করতে পারেন। আপনার নির্বাচন করুন UITableViewএবং বৈশিষ্ট্য পরিদর্শক খুলুন। স্ক্রোল ভিউ বিভাগে কীবোর্ড ক্ষেত্রটি ড্র্যাগে খারিজ করতে সেট করুন ।

এখানে চিত্র বর্ণনা লিখুন


ধন্যবাদ আপনি সবেমাত্র আমার জীবন বাঁচালেন!
সাবোবিন

41

কেবল উপরের উত্তরগুলিতে একটি আপডেট যুক্ত করতে। নীচে আমার জন্য সুইফট 1.2 তে কাজ করেছিল

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.OnDrag

অথবা

tableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.Interactive

2

সঙ্গে সুইফট 5

টেবিলভিউ স্ক্রোল করার সময় কীবোর্ডটি আড়াল করতে এবং সঠিকভাবে সম্পাদনা বন্ধ করতে আমাদের এখনও দুটি ধরণের উত্তর একত্রিত করতে হবে :

  1. আইবিতে কাইলর্ডকে বরখাস্ত মোড সেট করুন (যেমন কাইল ব্যাখ্যা করেছেন) বা ViewDidLoad()কোডে (যেমন পেই ব্যাখ্যা করেছেন):
tableView.keyboardDismissMode = .onDrag
  1. বর্তমান পাঠ্যক্ষেত্রকে প্রথম প্রতিক্রিয়াকারী হিসাবে পদত্যাগ করতে বাধ্য করুন ( ভ্যাসিলির উত্তরে)। আমাদের কেবল আমাদের UITableViewControllerক্লাসে নিম্নলিখিতগুলি যুক্ত করা দরকার
    override func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if !tableView.isDecelerating {
            view.endEditing(true)
        }
    }

1

আপনার নিয়ামকটিতে কোডের একক লাইন না লিখে সমাধানের কাজ করা:

আপনার প্রশ্নটি হ'ল হাইড কীবোর্ডটি কেবলমাত্র একটি শর্ত (হ্যান্ডল স্ক্রোল) সহ পরিচালনা করবে handle তবে এখানে আমি টেক্সটফিল্ড এবং কীবোর্ড একসাথে হ্যান্ডেল করার জন্য একটি সমাধানের পরামর্শ দিচ্ছি যা ইউআইভিউউকন্ট্রোলার, ইউআইটিএবলভিউ এবং ইউআইএসক্রোলভিউয়ের জন্য আকর্ষণীয় কাজ করে। মজার বিষয় হ'ল আপনাকে কোনও কোডের একটি লাইন লেখার দরকার নেই।

আপনি এখানে যান: টিপিকেয়ারবোর্ড চালিয়ে যাওয়া - কীবোর্ড এবং স্ক্রোলটি পরিচালনা করার দুর্দান্ত সমাধান


0

কার্য

সুইফট 3-এ ইউআইটিএবলভিউ স্ক্রোল করার সময় কীবোর্ড প্রোগ্রামিয়ালি লুকান

বিস্তারিত

xCode 8.2.1, সুইফট 3

সমাধান

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if !tableView.isDecelerating {
        view.endEditing(true)
    }
}

সম্পূর্ণ নমুনা

ViewController

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var searchBar: UISearchBar!


    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.dataSource = self
        tableView.delegate = self
    }
}

// MARK: - UITableViewDataSource

extension ViewController: UITableViewDataSource {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 100
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell =  UITableViewCell(style: .subtitle, reuseIdentifier: nil)
        cell.textLabel?.text = "Title"
        cell.detailTextLabel?.text = "\(indexPath)"
        return cell
    }
}

// MARK: - UITableViewDelegate

extension ViewController: UITableViewDelegate {

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if !tableView.isDecelerating {
            view.endEditing(true)
        }
    }
}

স্টোরিবোর্ড

<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11762" systemVersion="16D32" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11757"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="stackoverflow_4399357" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <searchBar contentMode="redraw" translatesAutoresizingMaskIntoConstraints="NO" id="wU1-dV-ueB">
                                <rect key="frame" x="0.0" y="20" width="375" height="44"/>
                                <textInputTraits key="textInputTraits"/>
                            </searchBar>
                            <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" keyboardDismissMode="interactive" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="L52-4c-UtT">
                                <rect key="frame" x="0.0" y="64" width="375" height="603"/>
                                <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                            </tableView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="wU1-dV-ueB" firstAttribute="bottom" secondItem="L52-4c-UtT" secondAttribute="top" id="0WF-07-qY1"/>
                            <constraint firstAttribute="trailing" secondItem="wU1-dV-ueB" secondAttribute="trailing" id="3Mj-h0-IvO"/>
                            <constraint firstItem="wU1-dV-ueB" firstAttribute="leading" secondItem="L52-4c-UtT" secondAttribute="leading" id="8W5-9j-2Rg"/>
                            <constraint firstItem="wU1-dV-ueB" firstAttribute="trailing" secondItem="L52-4c-UtT" secondAttribute="trailing" id="crK-dR-UYf"/>
                            <constraint firstItem="wU1-dV-ueB" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leading" id="mPe-bp-Dxw"/>
                            <constraint firstItem="L52-4c-UtT" firstAttribute="bottom" secondItem="wfy-db-euE" secondAttribute="top" id="oIo-DI-vLh"/>
                            <constraint firstItem="wU1-dV-ueB" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" id="tVC-UR-PA4"/>
                        </constraints>
                    </view>
                    <connections>
                        <outlet property="searchBar" destination="wU1-dV-ueB" id="xJf-bq-4t9"/>
                        <outlet property="tableView" destination="L52-4c-UtT" id="F0T-yb-h5r"/>
                    </connections>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-79.200000000000003" y="137.18140929535232"/>
        </scene>
    </scenes>
</document>

ফলাফল

এখানে চিত্র বর্ণনা লিখুন


0

আইওএস 7 এর পরে, আপনি টেবিলভিউ সম্পত্তিটি সহজেই ব্যবহার করতে পারেন

সুইফট 3.0+

myTableView.keyboardDismissMode = UIScrollViewKeyboardDismissMode.OnDrag

উদ্দেশ্য গ

myTableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag;

পূর্ববর্তী সংস্করণগুলির জন্য, স্ক্রোল ভিউ প্রতিনিধি কার্যকর করতে পারে।

func scrollViewDidScroll(_ scrollView: UIScrollView) {
        view.endEditing(true)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.