按钮单击时展开tableview单元格

时间:2016-08-22 16:50:42

标签: ios swift uitableview cell

我通过约束做了一些简单的技巧。我做了tableView cell这是可扩展的。在 cell 点击它会打开新单元格(黑色)(下面是图片以便于理解)。

我的问题是如何使用顶部单元格内的按钮使其工作,该按钮看起来像“V”。如果点击cell,我希望它至少旋转90°。我怎么能实现它。

这是我扩展的方式:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        if(selectedIndex == indexPath.row){
            return 210
        }else{
            return 135
        }
    }

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        if (selectedIndex == indexPath.row){
            selectedIndex = -1
        }else{
            selectedIndex = indexPath.row
        }

        self.productstable.beginUpdates()
        self.productstable.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
        self.productstable.endUpdates()
    }

2 个答案:

答案 0 :(得分:4)

你可以使用闭包来实现:

`structure(list(ObservationURI = c("http://resources.usgin.org/uri-gin/wygs/bhtemp/49-037-20341_182_12296/", 
"http://resources.usgin.org/uri-gin/wygs/bhtemp/49-037-20341_215_14316/", 
"http://resources.usgin.org/uri-gin/wygs/bhtemp/49-037-20341_236_16496/"
), WellName = c("1 BRADY UNIT ANADARKO E&P COMPANY LP", "1 BRADY UNIT ANADARKO E&P COMPANY LP", 
"1 BRADY UNIT ANADARKO E&P COMPANY LP"), APINo = c("49-037-20341", 
"49-037-20341", "49-037-20341"), HeaderURI = c("http://resources.usgin.org/uri-gin/wygs/well/3720341/", 
"http://resources.usgin.org/uri-gin/wygs/well/3720341/", "http://resources.usgin.org/uri-gin/wygs/well/3720341/"
), OtherID = c(3720341, 3720341, 3720341), OtherName = c(NA, 
NA, NA), BoreholeName = c(NA, NA, NA), Label = c("Temperature observation for well 3720341", 
"Temperature observation for well 3720341", "Temperature observation for well 3720341"
), Operator = c("", "", ""), LeaseName = c("", "", ""), LeaseOwner = c("", 
"", ""), LeaseNo = c("", "", ""), SpudDate = c("1900-01-01T00:00", 
"1900-01-01T00:00", "1900-01-01T00:00"), EndedDrillingDate = c("", 
"", ""), WellType = c("Oil", "Oil", "Oil"), Status = c("Producing Oil Well", 
"Producing Oil Well", "Producing Oil Well"), CommodityOfInterest = c("", 
"", ""), StatusDate = c("1973-05-03T00:00:00", "1973-05-03T00:00:00", 
"1973-05-03T00:00:00"), Function = c(NA, NA, NA), Production = c(NA, 
NA, NA), ProducingInterval = c(NA, NA, NA), ReleaseDate = c(NA, 
NA, NA), Field = c("", "", ""), OtherLocationName = c("Great Divide Basin", 
"Great Divide Basin", "Great Divide Basin"), County = c("Sweetwater", 
"Sweetwater", "Sweetwater"), State = c("WY", "WY", "WY"), PLSS_Meridians = c(NA, 
NA, NA), TWP = c("16N", "16N", "16N"), RGE = c("101W", "101W", 
"101W"), Section_ = c(11, 11, 11), SectionPart = c("NENW", "NENW", 
"NENW"), Parcel = c(NA, NA, NA), UTM_E = c(NA, NA, NA), UTM_N = c(NA, 
NA, NA), UTMDatumZone = c(NA, NA, NA), LatDegree = c(41.38696, 
41.38696, 41.38696), LongDegree = c(-108.75009, -108.75009, -108.75009
), SRS = c("EPSG:4326", "EPSG:4326", "EPSG:4326"), LocationUncertaintyStatement = c("nil:missing", 
"nil:missing", "nil:missing"), LocationUncertaintyCode = c(NA, 
NA, NA), LocationUncertaintyRadius = c(NA, NA, NA), DrillerTotalDepth = c(NA_real_, 
NA_real_, NA_real_), DepthReferencePoint = c(NA, NA, NA), LengthUnits = c("ft", 
"ft", "ft"), WellBoreShape = c(NA, NA, NA), TrueVerticalDepth = c(NA, 
NA, NA), ElevationKB = c(7135, 7135, 7135), ElevationDF = c(7106, 
7106, 7106), ElevationGL = c(0, 0, 0), FormationTD = c("", "", 
""), BitDiameterCollar = c(NA, NA, NA), BitDiameterTD = c(NA_real_, 
NA_real_, NA_real_), DiameterUnits = c("", "", ""), Notes = c("Depth of measurement assumed to be equal to driller total depth (CRC-AZGS, 2013).", 
"Depth of measurement assumed to be equal to driller total depth (CRC-AZGS, 2013).", 
"Depth of measurement assumed to be equal to driller total depth (CRC-AZGS, 2013)."
), MaximumRecordedTemperature = c(NA_real_, NA_real_, NA_real_
), MeasuredTemperature = c(182, 215, 236), CorrectedTemperature = c(NA_real_, 
NA_real_, NA_real_), TemperatureUnits = c(FALSE, FALSE, FALSE
), TimeSinceCirculation = c(NA_real_, NA_real_, NA_real_), CirculationDuration = c(11, 
12, 12), MeasurementProcedure = c("Well log", "Well log", "Well log"
), CorrectionType = c(NA, NA, NA), DepthOfMeasurement = c(-99999, 
-99999, -99999), MeasurementDateTime = c("", "", ""), MeasurementFormation = c("", 
"", ""), MeasurementSource = c("Richard W. Davis: Deriving geothermal parameters from bottom-hole temperatures in Wyoming\" AAPG bulletin, V. 96, No. 8 (August 2012), pp. 1579-1592", 
"Richard W. Davis: Deriving geothermal parameters from bottom-hole temperatures in Wyoming\" AAPG bulletin, V. 96, No. 8 (August 2012), pp. 1579-1592", 
"Richard W. Davis: Deriving geothermal parameters from bottom-hole temperatures in Wyoming\" AAPG bulletin, V. 96, No. 8 (August 2012), pp. 1579-1592"
), RelatedResource = c(NA, NA, NA), CasingLogger = c(NA, NA, 
NA), CasingBottomDepthDriller = c(NA, NA, NA), CasingTopDepth = c(NA_real_, 
NA_real_, NA_real_), CasingPipeDiameter = c(NA, NA, NA), CasingWeight = c(NA, 
NA, NA), CasingWeightUnits = c(NA, NA, NA), CasingThickness = c(NA, 
NA, NA), DrillingFluid = c("", "", ""), Salinity = c(NA_real_, 
NA_real_, NA_real_), MudResistivity = c(NA_real_, NA_real_, NA_real_
), Density = c(NA_real_, NA_real_, NA_real_), FluidLevel = c(NA_real_, 
NA_real_, NA_real_), pH = c(NA_real_, NA_real_, NA_real_), Viscosity = c(NA_real_, 
NA_real_, NA_real_), FluidLoss = c(NA_real_, NA_real_, NA_real_
), MeasurementNotes = c(NA, NA, NA), InformationSource = c("Wyoming State Geological Survey", 
"Wyoming State Geological Survey", "Wyoming State Geological Survey"
)), .Names = c("ObservationURI", "WellName", "APINo", "HeaderURI", 
"OtherID", "OtherName", "BoreholeName", "Label", "Operator", 
"LeaseName", "LeaseOwner", "LeaseNo", "SpudDate", "EndedDrillingDate", 
"WellType", "Status", "CommodityOfInterest", "StatusDate", "Function", 
"Production", "ProducingInterval", "ReleaseDate", "Field", "OtherLocationName", 
"County", "State", "PLSS_Meridians", "TWP", "RGE", "Section_", 
"SectionPart", "Parcel", "UTM_E", "UTM_N", "UTMDatumZone", "LatDegree", 
"LongDegree", "SRS", "LocationUncertaintyStatement", "LocationUncertaintyCode", 
"LocationUncertaintyRadius", "DrillerTotalDepth", "DepthReferencePoint", 
"LengthUnits", "WellBoreShape", "TrueVerticalDepth", "ElevationKB", 
"ElevationDF", "ElevationGL", "FormationTD", "BitDiameterCollar", 
"BitDiameterTD", "DiameterUnits", "Notes", "MaximumRecordedTemperature", 
"MeasuredTemperature", "CorrectedTemperature", "TemperatureUnits", 
"TimeSinceCirculation", "CirculationDuration", "MeasurementProcedure", 
"CorrectionType", "DepthOfMeasurement", "MeasurementDateTime", 
"MeasurementFormation", "MeasurementSource", "RelatedResource", 
"CasingLogger", "CasingBottomDepthDriller", "CasingTopDepth", 
"CasingPipeDiameter", "CasingWeight", "CasingWeightUnits", "CasingThickness", 
"DrillingFluid", "Salinity", "MudResistivity", "Density", "FluidLevel", 
"pH", "Viscosity", "FluidLoss", "MeasurementNotes", "InformationSource"
), row.names = c(NA, 3L), class = "data.frame")`

File 2 example:

`structure(list(ObservationURI = c("http://resources.usgin.org/uri-gin/mags/bhtemp/UM:MA-Weston47-422036N0711640.1/", 
"http://resources.usgin.org/uri-gin/mags/bhtemp/UM:MA-Dover20-421431N0711752.1/", 
"http://resources.usgin.org/uri-gin/mags/bhtemp/UM:MA-Lincoln13-422440N0711815.1/"
), WellName = c("Weston47-USGS HDR19", "Dover20-USGS HDR19", 
"Lincoln13-USGS HDR19"), APINo = c(NA, NA, NA), HeaderURI = c("http://resources.usgin.org/uri-gin/mags/well/Weston47-USGS_HDR19/", 
"http://resources.usgin.org/uri-gin/mags/well/Dover20-USGS_HDR19/", 
"http://resources.usgin.org/uri-gin/mags/well/Lincoln13-USGS_HDR19/"
), OtherID = c("", "", ""), OtherName = c("", "", ""), BoreholeName = c(NA, 
NA, NA), Operator = c(NA, NA, NA), LeaseOwner = c(NA, NA, NA), 
    LeaseNo = c(NA, NA, NA), SpudDate = c(NA, NA, NA), EndedDrillingDate = c("", 
    "", ""), WellType = c("temporarily abandoned", "observation", 
    "observation"), Status = c("Idle", "Idle", "Idle"), CommodityOfInterest = c("Water", 
    "Water", "Water"), StatusDate = c("", "", ""), Function = c("production", 
    "monitoring", "monitoring"), Production = c(NA, NA, NA), 
    Field = c(NA, NA, NA), County = c("Middlesex", "Norfolk", 
    "Middlesex"), State = c("MA", "MA", "MA"), PLSS_Meridians = c(NA, 
    NA, NA), TWP = c(NA, NA, NA), RGE = c(NA, NA, NA), Section_ = c(NA, 
    NA, NA), SectionPart = c(NA, NA, NA), Parcel = c(NA, NA, 
    NA), UTM_E = c(NA, NA, NA), UTM_N = c(NA, NA, NA), LatDegree = c(42.3147771183, 
    42.2417748607, 42.4110851252), LongDegree = c(-71.3257301787, 
    -71.2975422044, -71.3034583949), SRS = c("EPSG:4326", "EPSG:4326", 
    "EPSG:4326"), LocationUncertaintyStatement = c("Field located on topographic map", 
    "Field located on topographic map", "Field located on topographic map"
    ), DrillerTotalDepth = c(29, 22, 20), LengthUnits = c("ft", 
    "ft", "ft"), WellBoreShape = c("Vertical", "Vertical", "Vertical"
    ), TrueVerticalDepth = c(NA, NA, NA), ElevationGL = c(140, 
    150, 180), BitDiameterTD = c(72, 48, 42), DiameterUnits = c("in", 
    "in", "in"), Notes = c("", "", ""), MeasuredTemperature = c(8, 
    9, 8.5), CorrectedTemperature = c(NA, NA, NA), TemperatureUnits = c("C", 
    "C", "C"), TimeSinceCirculation = c(NA, NA, NA), CirculationDuration = c(NA, 
    NA, NA), MeasurementProcedure = c("Samples collected from spigot or faucet nearest to well.  Water run until temperature, pH or specific conductance stablized.  Temperature measured with a mercury thermometer to nearest half degree in degrees F.  Converted to degrees C for table.", 
    "Samples collected from spigot or faucet nearest to well.  Water run until temperature, pH or specific conductance stablized.  Temperature measured with a mercury thermometer to nearest half degree in degrees F.  Converted to degrees C for table.", 
    "Samples collected from spigot or faucet nearest to well.  Water run until temperature, pH or specific conductance stablized.  Temperature measured with a mercury thermometer to nearest half degree in degrees F.  Converted to degrees C for table."
    ), CorrectionType = c(NA, NA, NA), DepthOfMeasurement = c(NA, 
    NA, NA), MeasurementDateTime = c(NA, NA, NA), MeasurementFormation = c(NA, 
    NA, NA), MeasurementSource = c("Walker, Eugene H., William W. Caswell, and S. William Wandle, Jr. Hydrologic Data of the Charles River Basin", 
    "Walker, Eugene H., William W. Caswell, and S. William Wandle, Jr. Hydrologic Data of the Charles River Basin", 
    "Walker, Eugene H., William W. Caswell, and S. William Wandle, Jr. Hydrologic Data of the Charles River Basin"
    ), CasingLogger = c(" Massachusetts\". USGS Massachusetts Hydrologic-Data Report No. 19 (1977): 1-57. Print.  ftp://eclogite.geo.umass.edu/pub/stategeologist/Products/Geothermal/BoreholeTemperatureData/DataReport19.pdf\"", 
    " Massachusetts\". USGS Massachusetts Hydrologic-Data Report No. 19 (1977): 1-57. Print.  ftp://eclogite.geo.umass.edu/pub/stategeologist/Products/Geothermal/BoreholeTemperatureData/DataReport19.pdf\"", 
    " Massachusetts\". USGS Massachusetts Hydrologic-Data Report No. 19 (1977): 1-57. Print.  ftp://eclogite.geo.umass.edu/pub/stategeologist/Products/Geothermal/BoreholeTemperatureData/DataReport19.pdf\""
    ), CasingDepthDriller = c("", "", ""), CasingPipeDiameter = c("", 
    "", ""), CasingWeight = c(NA, NA, NA), CasingWeightUnits = c(NA, 
    NA, NA), CasingThickness = c(NA, NA, NA), DrillingFluid = c(NA, 
    NA, NA), Salinity = c(NA, NA, NA), MudResisitivity = c(NA, 
    NA, NA), Density = c(NA, NA, NA), FluidLevel = c(NA, NA, 
    NA), pH = c(NA, NA, NA), Viscosity = c(NA, NA, NA), FluidLoss = c(NA, 
    NA, NA), Unnamed..66 = c(NA, NA, NA), BitDiameterCollar = c(72, 
    48, 42), Unnamed..68 = c(NA, NA, NA), InformationSource = c("Stephen Mabee, MA State Geologist, University of Massachusetts, 611 North Pleasant Street, Amherst MA 01003 413-545-2285", 
    "Stephen Mabee, MA State Geologist, University of Massachusetts, 611 North Pleasant Street, Amherst MA 01003 413-545-2285", 
    "Stephen Mabee, MA State Geologist, University of Massachusetts, 611 North Pleasant Street, Amherst MA 01003 413-545-2285"
    )), .Names = c("ObservationURI", "WellName", "APINo", "HeaderURI", 
"OtherID", "OtherName", "BoreholeName", "Operator", "LeaseOwner", 
"LeaseNo", "SpudDate", "EndedDrillingDate", "WellType", "Status", 
"CommodityOfInterest", "StatusDate", "Function", "Production", 
"Field", "County", "State", "PLSS_Meridians", "TWP", "RGE", "Section_", 
"SectionPart", "Parcel", "UTM_E", "UTM_N", "LatDegree", "LongDegree", 
"SRS", "LocationUncertaintyStatement", "DrillerTotalDepth", "LengthUnits", 
"WellBoreShape", "TrueVerticalDepth", "ElevationGL", "BitDiameterTD", 
"DiameterUnits", "Notes", "MeasuredTemperature", "CorrectedTemperature", 
"TemperatureUnits", "TimeSinceCirculation", "CirculationDuration", 
"MeasurementProcedure", "CorrectionType", "DepthOfMeasurement", 
"MeasurementDateTime", "MeasurementFormation", "MeasurementSource", 
"CasingLogger", "CasingDepthDriller", "CasingPipeDiameter", "CasingWeight", 
"CasingWeightUnits", "CasingThickness", "DrillingFluid", "Salinity", 
"MudResisitivity", "Density", "FluidLevel", "pH", "Viscosity", 
"FluidLoss", "Unnamed..66", "BitDiameterCollar", "Unnamed..68", 
"InformationSource"), row.names = c(NA, 3L), class = "data.frame")`

在您的自定义单元格中声明typealias arrowButtonTappedBlock = (button:UIButton) -> Void ,如下所示:

closure

并点击箭头按钮点击动作,如下所示调用闭包:

var arrowButtonTapped : arrowButtonTappedBlock!

并在if arrowButtonTapped != nil { arrowButtonTapped(button: sender as! UIButton) } 中:设置关闭并执行您在cellForRowAtIndexPath

中执行的操作
didSelectRowAtIndexPath:

答案 1 :(得分:0)

您可以轻松地做到这一点

  1. Delare var selectedRowIndex = -1

  2. 为您的自定义单元创建协议

    protocol TableViewCellDelegate {
    func BtnExpendTapped(_ cell: CustomCell) }
    
  3. 在“自定义单元格声明”协议中,并为按钮添加操作方法

    var delegate: TableViewCellDelegate?

    @IBAction func actionExpendBtnTap(_ sender: UIButton){
       delegate?.BtnExpendTapped(self)
    }
    
  4. 在“行高”方法中,将“ Expended”和“正常”高度添加为要求

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
                    if indexPath.row == selectedRowIndex {
                        return 270 //Expanded
                    }
                    return 138.5 //Not expanded
           }
    
    
  5. 在视图控制器中使用协议委托并添加委托方法

func BtnExpendTapped(_ cell: CustomCell) {
     if let indexPath = tblView.indexPath(for: cell) {
         if selectedRowIndex == indexPath.row {
             selectedRowIndex = -1
         } else {
             selectedRowIndex = indexPath.row
         }
        tblView.reloadRows(at: [indexPath], with: .none)
     }
 }